为什么mongoose总是在我的集合名称的末尾添加一个s

时间:2012-05-11 07:18:40

标签: node.js mongodb mongoose

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

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

此代码导致创建一个名为“users”的集合

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

由于

8 个答案:

答案 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)

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

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作为状态

Click the link to view the picture properly

答案 7 :(得分:-2)

在运行此命令时,猫鼬会为您编译一个模型

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

第一个参数是您的模型所针对的集合的单数名称。 猫鼬会自动查找模型名称的复数形式,小写因此,在上面的示例中,模型子对象用于数据库中的children集合。

注意.model()函数可复制架构。在调用.model()之前,请确保已添加了要架构的所有内容,包括钩子!