Mongoose.model vs Connection.model vs Model.model

时间:2012-10-09 18:55:05

标签: node.js mongodb mongoose odm

我对mongoosejs

中模型的使用感到困惑

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

使用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返回的模型之间有什么区别。什么时候用,  建议/获取模型的推荐方法是什么?

3 个答案:

答案 0 :(得分:17)

  1. mongoose.model将定义的模型绑定到通过调用mongoose.connect创建的默认连接。
  2. db.model将模型与通过调用var db = mongoose.createConnection
  3. 创建的连接联系起来
  4. doc.model使用doc模型所依赖的连接按名称查找其他模型。
  5. 这三个都可以在同一个程序中合理使用;使用哪一个取决于具体情况。

答案 1 :(得分:11)

好的,这是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

VS

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

答案 2 :(得分:0)

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

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