我有一个包含子文档的模式,如下所示:
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不支持填充单个子文档实例(如果我错了,请纠正我,并且有办法)。
我知道它可以填充整个事件数组,但我只需要为一个实例执行此操作,无需填充数组中所有事件的开销。
答案 0 :(得分:0)
对于与我有同样问题的人。 mongoose 4.0现在支持此功能。
对于3.x或更低版本的用户,实际上并不是一个合适的替代解决方案,但可以通过将对象转换为普通的JSON对象来部分实现。
通过 .toObject()或 .toJSON()然后执行分配。 但请注意,您将松开mongoose功能,因此只有在返回客户端之前才这样做。
答案 1 :(得分:-2)
如果您想手动填充它,请执行以下操作:
User.findOneById(sender, function(err, foundSender) {
event.sender = foundSender;
});