2012-10-09 66 views
11

我有點混淆的車型使用的mongoosejsMongoose.model VS Connection.model VS Model.model

可以用貓鼬在這些方面

使用貓鼬創建

模型

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返回模型之間的差異。什麼時候使用什麼, 建議/創建/獲取模型的方式是什麼?

回答

13
  1. mongoose.model將定義的模型綁定到通過調用mongoose.connect創建的默認連接。
  2. db.model將模型連接到通過調用var db = mongoose.createConnection創建的連接。
  3. doc.model使用doc的模型連接到的連接按名稱查找另一個模型。

所有這三個都可以明智地用在同一個程序中;哪一個使用取決於情況。

8

確定這裏就是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 
0

mongoose.connect是爲你連接到同一個數據庫,但是你的數據庫是平衡或replicaSet

db.model是針對Mongo開放的多個連接,每個連接都有不同的讀/寫設置

相關問題