Mongoose.model与Connection.model与Model.model

我对mongoosejs模型的使用有些困惑

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

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

  1. mongoose.model将定义的模型mongoose.model到通过调用mongoose.connect创build的默认连接。
  2. db.model将模型db.model到通过调用var db = mongoose.createConnection db.model创build的连接。
  3. doc.model使用doc的模型绑定的连接按名称查找另一个模型。

所有这三个都可以用在同一个程序中。 哪一个使用取决于情况。

好的,这是我发现的

重要! 如果您使用mongoose.createConnection()打开单独的连接,但是尝试通过mongoose.model('ModelName')访问模型,它将无法按预期工作,因为它没有连接到活动数据库连接。 在这种情况下,通过您创build的连接访问您的模型:

 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 

mongoose.connect用于连接到相同的数据库,尽pipe您的数据库是balance或replicaSet

db.model是针对Mongo开放的多个连接,每个都有不同的读/写设置