例如,此代码导致创建一个名为“datas”的集合
var Dataset = mongoose.model('data', dataSchema);
此代码导致创建一个名为“users”的集合
var User = mongoose.model('user', dataSchema);
由于
答案 0 :(得分:160)
猫鼬正在努力做到聪明。但是你可以强迫它成为你想要的任何东西:
var dataSchema = new Schema({..}, { collection: 'data' })
答案 1 :(得分:37)
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);
答案 2 :(得分:6)
您可以简单地添加一个字符串作为第三个参数来定义集合的实际名称。扩展您的示例,将名称分别设为one
和data
:
user
答案 3 :(得分:4)
从猫鼬5.x开始,您可以完全禁用它:
mongoose.pluralize(null);
答案 4 :(得分:1)
您可以将集合名称添加为第三个参数。请参阅使用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;
答案 5 :(得分:0)
//Mongoose's definition file. NOT your model files
1 const mongoose = require("mongoose");
2 mongoose.pluralize(null);
在Mongoose文件中添加行mongoose.pluralize(null)
将防止集合名称复数。您无需将此行添加到模型文件中。
如here所示。
答案 6 :(得分:0)
在下一行定义模式结束时 使用此代码
module.exports = mongoose.model("State", "StateSchema", "state")
假设您要在数据库上使用状态以避免s作为状态
答案 7 :(得分:-2)
在运行此命令时,猫鼬会为您编译一个模型
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var child = mongoose.model('child', schema);
第一个参数是您的模型所针对的集合的单数名称。 猫鼬会自动查找模型名称的复数形式,小写。因此,在上面的示例中,模型子对象用于数据库中的children集合。
注意:.model()
函数可复制架构。在调用.model()
之前,请确保已添加了要架构的所有内容,包括钩子!