为什么mongoose总是添加一个s到我的collections名称的末尾
例如,这段代码会创build一个名为“datas”的集合
var Dataset = mongoose.model('data', dataSchema);
而这段代码会产生一个名为“users”的集合
var User = mongoose.model('user', dataSchema);
谢谢
mongoose正在努力变得聪明。 但是,你可以强迫它成为你想要的任何东西:
var dataSchema = new Schema({..}, { collection: 'data' })
mongoose.model的API结构是这样的:
Mongoose#model(name, [schema], [collection], [skipInit])
什么mongoose做的是,当没有收集参数被传递时,Mongoose通过复制模型名称来产生一个集合名称。 如果您不喜欢这种行为,请传递集合名称或设置您的模式集合名称选项。
例:
var schema = new Schema({ name: String }, { collection: 'actor' });
要么
schema.set('collection', 'actor');
要么
var collectionName = 'actor' var M = mongoose.model('Actor', schema, collectionName);
您可以简单地添加一个string作为第三个参数来定义集合的实际名称。 扩展你的例子,把名字分别保存为data
和user
:
var Dataset = mongoose.model('data', dataSchema, 'data'); var User = mongoose.model('user', dataSchema, 'user');
您可以添加集合名称作为第三个参数。 使用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<IUser>("User", UserSchema.schema,"User"); export = schema;