¿Por qué la mongoose siempre agrega una s al final del nombre de mi colección?

Por ejemplo, este código da como resultado una colección llamada “datas” que se está creando

var Dataset = mongoose.model('data', dataSchema); 

Y este código da como resultado una colección llamada “usuarios” que se está creando

 var User = mongoose.model('user', dataSchema); 

Gracias

Mangosta está tratando de ser inteligente. Sin embargo, puedes forzarlo a que sea lo que quieras:

var dataSchema = new Schema({..}, { collection: 'data' })

La estructura API de mongoose.model es esta:

 Mongoose#model(name, [schema], [collection], [skipInit]) 

Lo que hace la mongoose es que, cuando no se pasa ningún argumento de recolección, Mongoose produce un nombre de colección al pluralizar el nombre del modelo. Si no le gusta este comportamiento, pase un nombre de colección o configure su opción de nombre de colección de esquemas.

Ejemplo:

 var schema = new Schema({ name: String }, { collection: 'actor' }); 

o

 schema.set('collection', 'actor'); 

o

 var collectionName = 'actor' var M = mongoose.model('Actor', schema, collectionName); 

Simplemente puede agregar una cadena como tercer argumento para definir el nombre real de la colección. Extendiendo sus ejemplos, para mantener los nombres como data y user respectivamente:

 var Dataset = mongoose.model('data', dataSchema, 'data'); var User = mongoose.model('user', dataSchema, 'user'); 

Puede agregar el nombre de la colección como tercer parámetro. Vea el ejemplo usando Typescript:

 import DataAccess = require('../DataAccess'); import IUser = require("../../Models/Interfaces/IUser"); var mongoose = DataAccess.mongooseInstance; var mongooseConnection = DataAccess.mongooseConnection; class UserSchema { static get schema () { var schema = mongoose.Schema({ _id : { type: String }, Name: { type: String, required: true }, Age: { type: Number, required: true } }); return schema; } } var schema:any = mongooseConnection.model("User", UserSchema.schema,"User"); export = schema;