2012-05-18 19 views
0

如何使用引用文檔本身設置DBref,並且仍然可以訪問文檔,就好像它已填充到父對象上一樣?如何在Mongoose中將文檔設置爲DBref並仍然可以訪問文檔

如果我有一個字段設置爲DBREF場一個簡單的模式:

var PostSchema = new Schema({ 
    'title': String, 
    '_author', { type: Schema.ObjectId, ref: 'users'} 
}); 
var Post = mongoose.model('posts', PostSchema); 

var UserSchema = new Schema({ 
    'name': String 
}); 
Var User = mongoose.model('users', UserSchema); 

如果我試着這樣做:

var john = User.findOne({'name': 'john'}); 
var post = new Post({'title': 'My Post'}); 
post._author = john; 

post.save(function(err) { 
    if (!err) { 
    console.log(post._author); 
    } 
}); 

post._author屬性有值作者._id。我更喜歡讓_author屬性具有整個作者文檔的值(類似於如果我已對posts集合執行查找查詢並填充作者對象)。

我唯一的解決方案是在保存回調中執行這樣一個findOne查詢,並確保我將作者填入...這感覺有點偏離,因爲我基本上必須重新查詢,當我已經擁有所有信息。

有什麼建議嗎?謝謝

回答

0

這是Mongoose的populate功能的目的。在你的榜樣,你會設置post._author = john._id創建時的帖子,然後查詢收集後你會使用這樣的代碼來填充_author有完整的用戶對象時:

post.findOne({'title': 'My Post'}).populate('_author').exec(function (err, post) { 
    // post._author contains a User model instance 
}); 
+0

是的,這個作品非常好,當我只是檢索數據,但是在設置數據之後,我必須按照您描述的那樣「findOne」?當我已經擁有所需的數據時,必須發出'find'查詢似乎有點奇怪。 – jonotron

相關問題