如何在 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 中将中间件放在它自己的文件中