0

如何使用引用的文档本身设置 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 属性具有整个作者文档的值(类似于我对帖子集合执行查找查询并填充作者对象)。

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

有什么建议么?谢谢

4

1 回答 1

0

这是Mongoose的填充功能的目的。在您的示例中,您post._author = john._id在创建帖子时进行了设置,然后在查询帖子集合时,您将使用这样的代码来填充_author完整的 User 对象:

post.findOne({'title': 'My Post'}).populate('_author').exec(function (err, post) {
    // post._author contains a User model instance
});
于 2012-05-19T15:49:23.993 回答