如何使用引用的文档本身设置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 属性的值为author._id。我希望_author属性具有整个作者文档的值(类似于我在posts集合上执行了查询并填充了作者对象)。
我唯一的解决方案是在保存回调中执行这样的findOne查询,并确保我将作者填充回来...这感觉有点不对,因为当我已经拥有所有信息时,我基本上不得不重新查询。
有什么建议吗?感谢
答案 0 :(得分:0)
这是Mongoose的populate功能的目的。在您的示例中,您在创建帖子时设置post._author = john._id
,然后在查询帖子集合时,您将使用这样的代码用完整的User对象填充_author
:
post.findOne({'title': 'My Post'}).populate('_author').exec(function (err, post) {
// post._author contains a User model instance
});