如何在 Express.js 应用程序中将猫鼬模型与正确的 MongoDB 集合相关联?

Posted

技术标签:

【中文标题】如何在 Express.js 应用程序中将猫鼬模型与正确的 MongoDB 集合相关联?【英文标题】:How to associate a mongoose model with the right MongoDB collection in Express.js app? 【发布时间】:2019-05-23 11:19:00 【问题描述】:

如何在 express js 应用程序中使用 mongoose ORM 指向 mongodb 中的特定集合。

不适用

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var personSchema = new Schema(
 name: String,
 age: Number
);

module.exports = mongoose.model('person', personSchema);

考虑我的 mongo 数据库有多个集合,那么我上面的代码将如何指向特定的集合。

【问题讨论】:

标题只能包含直接问题,格式化代码 【参考方案1】:

非常抱歉,我选择的答案不准确。我无法删除它,因为它已被接受。您的问题的准确答案是,mongoose.model('person', personSchema); 将自动创建模型名称的复数小写版本。在这种情况下,如果集合 persons 不存在,它将自动在 mongoDB 中创建。 如果你想覆盖这个默认行为,你可以这样做:

var personSchema = new Schema( 名称:字符串, 年龄:数字 , 集合:'人' );

mongoose.model( 'person', personSchema, 'people' ) 所以你把它称为人,但集合名称将是人

【讨论】:

【参考方案2】:

通常我们遵循在 mongoDB 中命名集合复数的约定。例如在 MongoDB 中,我们创建 users 表,但在 Node.js 中使用单数。所以出口将是:

module.exports = mongoose.model('users',UserSchema)

在其他脚本中,我们要求它如下: const User=require('<pathToModel>/user')

这意味着我们将模型称为User,它基于UserSchema,与之关联的集合是users

在您的代码中,您可以这样做:

module.exports = mongoose.model('person', personSchema); 

【讨论】:

【参考方案3】:

如果您有一个特定的集合,您希望基于特定模型的文档进入,您可以使用mongoose.model('person', personSchema, collection)

或者,您可以在 Schema 定义中命名所需的关联集合:

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

https://mongoosejs.com/docs/guide.html

【讨论】:

以上是关于如何在 Express.js 应用程序中将猫鼬模型与正确的 MongoDB 集合相关联?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js / Express.js 中将中间件放在它自己的文件中

在猫鼬模型中将对象添加到人口

如何在 express 项目中将 css 链接到 html?

护照本地猫鼬帐户注册的其他字段?

护照本地猫鼬帐户注册的其他字段?

如何在猫鼬中将对象字段作为数组获取?