Mongoose-子文档,不能手动填充/设置ref字段

Mongoose-子文档,不能手动填充/设置ref字段,mongoose,mongoose-populate,Mongoose,Mongoose Populate,我有一个带有子文档的模式,如下所示: User: { events: [{ sender: { type: Schema.ObjectId, ref: 'User' } }] } 现在,假设我检索子文档,并且我已经从数据库检索到“发件人”,我无法手动设置它,我的意思是: var sender = User.findBy.... // I retrieve the sender var event = user.events.id(id); //

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

User: {
  events: [{
    sender: {
      type: Schema.ObjectId,
      ref: 'User'
    }
  }]
}
现在,假设我检索子文档,并且我已经从数据库检索到“发件人”,我无法手动设置它,我的意思是:

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似乎不支持填充单个子文档实例(如果我错了,请纠正我,并且有办法)


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

如果要手动填充,请执行以下操作:

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

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

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

通过.toObject().toJSON()然后执行赋值。
但是请注意,您将失去mongoose功能,因此只有在返回到客户端之前才执行此操作。

这就是我所做的,如果您查看我上面的示例,该示例不起作用,mongoose对象不接受分配。