为什么猫鼬总是在我的收藏名字后面加一个 s

例如,此代码导致创建名为“ data”的集合

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

这段代码将创建一个名为“ users”的集合

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

谢谢

56697 次浏览

猫鼬想耍小聪明把你的收藏品名改成复数。然而,你可以强迫它成为你想要的任何东西:

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

Model 的 API 结构如下:

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

当没有传递集合参数时,Mongoose 通过复数模型名称生成一个集合名称。如果不喜欢此行为,请传递集合名称或设置架构集合名称选项。

例如:

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

或者

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

或者

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

您可以简单地添加一个字符串作为第三个参数来定义集合的实际名称。扩展您的示例,将名称分别保留为 datauser:

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


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

可以将集合名称添加为第三个参数:

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.x 开始,你可以完全禁用它:

mongoose.pluralize(null);
//Mongoose's definition file. NOT your model files
1 const mongoose = require("mongoose");
2 mongoose.pluralize(null);

在 Mongoose 文件中添加 linemongoose.pluralize(null)将防止集合名称多元化。您不需要将此行添加到您的模型文件中。

就像看到的 给你

在下一行定义模式的最后 用这个密码

module.exports = mongoose.model("State", "StateSchema", "state")

假设您的状态是您想要在数据库上使用的,以避免 s 作为状态

单击该链接以正确查看图片

当您运行此命令时,Mongoose 将为您编译一个模型

var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var child = mongoose.model('child', schema);

第一个参数是您的模型所用的集合的单数名称。因此,对于上面的示例,模型子元素用于数据库中的子元素集合。

注意: .model()函数创建模式的副本。在调用 .model()之前,请确保您已经添加了所有您想要模式的内容,包括 Hook!