Mongoose - Subdocument,无法手动填充/设置ref字段

时间:2015-03-18 23:27:17

标签: mongoose mongoose-populate

我有一个包含子文档的模式,如下所示:

User: {
  events: [{
    sender: {
      type: Schema.ObjectId,
      ref: 'User'
    }
  }]
}

现在说我检索子子文档,我已经有了发送者'从db中检索,我无法手动设置它,这就是我的意思:

var sender = User.findBy.... // I retrieve the sender
var event = user.events.id(id); // I retrieve the event by ID for the current user

// Now I want to do this but it doesn't work
event.sender = sender; // does not assign, it still remains an ObjectId

我希望上面的内容基本上是自己手动完成填充,因为似乎mongoose不支持填充单个子文档实例(如果我错了,请纠正我,并且有办法)。

我知道它可以填充整个事件数组,但我只需要为一个实例执行此操作,无需填充数组中所有事件的开销。

2 个答案:

答案 0 :(得分:0)

对于与我有同样问题的人。 mongoose 4.0现在支持此功能。

对于3.x或更低版本的用户,实际上并不是一个合适的替代解决方案,但可以通过将对象转换为普通的JSON对象来部分实现。

通过 .toObject() .toJSON()然后执行分配。 但请注意,您将松开mongoose功能,因此只有在返回客户端之前才这样做。

答案 1 :(得分:-2)

如果您想手动填充它,请执行以下操作:

User.findOneById(sender, function(err, foundSender) {
    event.sender = foundSender;
});