148

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

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

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

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

谢谢

4

8 回答 8

239

Mongoose 试图通过使您的收藏名称复数来变得聪明。但是,您可以强制它成为您想要的任何东西:

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

于 2012-05-11T23:49:04.930 回答
56

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);
于 2014-06-28T05:44:14.453 回答
44

从 mongoose 5.x 开始,您可以完全禁用它:

mongoose.pluralize(null);
于 2019-02-22T18:07:41.880 回答
9

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

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

var User = mongoose.model('user', dataSchema, 'user');
于 2017-07-19T21:54:05.683 回答
6
//Mongoose's definition file. NOT your model files
1 const mongoose = require("mongoose");
2 mongoose.pluralize(null);

mongoose.pluralize(null)在 Mongoose 文件中添加该行将防止集合名称复数。您不需要将此行添加到模型文件中。

如此处所见。

于 2019-07-22T01:49:45.580 回答
2

您可以将集合名称添加为第三个参数。请参阅使用 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;
于 2017-11-03T06:36:18.617 回答
1

在下一行定义您的架构结束时使用此代码

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

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

点击链接正确查看图片

于 2019-12-11T10:53:29.610 回答
-2

当您运行此命令时,Mongoose 会为您编译模型

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

第一个参数是您的模型所针对的集合的单数名称。Mongoose 会自动查找您的型号名称的复数、小写版本。因此,对于上面的示例,模型 child 用于数据库中的 children 集合。

注意:.model()函数会复制模式。在调用.model()!

于 2020-06-09T05:19:17.620 回答