Mongoose.model vs Connection.model vs Model.model

Posted

技术标签:

【中文标题】Mongoose.model vs Connection.model vs Model.model【英文标题】: 【发布时间】:2012-09-30 04:04:19 【问题描述】:

我对 mongoosejs 中模型的用法有点困惑

可以通过这些方式使用 mongoose 创建模型

使用猫鼬

var mongoose = require('mongoose');
var Actor = mongoose.model('Actor', new Schema( name: String ));

使用连接

var mongoose = require('mongoose');
var db = mongoose.createConnection(..);
db.model('Venue', new Schema(..));
var Ticket = db.model('Ticket', new Schema(..));
var Venue = db.model('Venue');

使用现有的模型实例

var doc = new Tank;
doc.model('User').findById(id, callback);

现在Mongoose.modelConnection.modelModel.model 返回的模型有什么区别。以及何时使用什么, 推荐的创建/获取模型的方法是什么?

【问题讨论】:

【参考方案1】:
    mongoose.model 将定义的模型与通过调用 mongoose.connect 创建的默认连接联系起来。 db.model 将模型与通过调用 var db = mongoose.createConnection 创建的连接联系起来。 doc.model 使用 doc 的模型所绑定的连接按名称查找另一个模型。

这三个都可以在同一个程序中合理地使用;使用哪一个取决于具体情况。

【讨论】:

【参考方案2】:

好的,这就是I found

重要!如果您使用 mongoose.createConnection() 但尝试通过 mongoose.model('ModelName') 它不会按预期工作,因为它是 未连接到活动的数据库连接。在这种情况下,访问您的 通过您创建的连接建模:

var conn = mongoose.createConnection('your connection string');
var MyModel = conn.model('ModelName', schema);
var m = new MyModel;
m.save() // works

var conn = mongoose.createConnection('your connection string');
var MyModel = mongoose.model('ModelName', schema);
var m = new MyModel;
m.save() // does not work b/c the default connection object was never connected

【讨论】:

【参考方案3】:

mongoose.connect 是为你连接到同一个数据库,虽然你的数据库是 balance 或 replicaSet

db.model 用于向 Mongo 打开的多个连接,每个连接具有不同的读/写设置

【讨论】:

以上是关于Mongoose.model vs Connection.model vs Model.model的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:findOneAndUpdate 不返回更新的文档

Mongoose:findOneAndUpdate 不返回更新的文档

Mongoose:findOneAndUpdate 不返回更新的文档

mongoose.model 中的第三个参数是啥?它有啥用

Mongoose:Model.create 和 Collection.insert 有啥区别

致命错误:尚未为模型“a”注册架构。使用 mongoose.model(name, schema)