如何在Mongoose中将文档设置为DBref,并且仍然可以访问该文档

时间:2012-05-18 16:38:07

标签: node.js 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 属性的值为author._id。我希望_author属性具有整个作者文档的值(类似于我在posts集合上执行了查询并填充了作者对象)。

我唯一的解决方案是在保存回调中执行这样的findOne查询,并确保我将作者填充回来...这感觉有点不对,因为当我已经拥有所有信息时,我基本上不得不重新查询。

有什么建议吗?感谢

1 个答案:

答案 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
});