2015-03-18 78 views
0

我有一个子文档,像这样一个模式:猫鼬 - 子文档,不能手动填充/套ref字段

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 

我想上面基本上做手工人口自己,因为它似乎并不认为猫鼬支持填充一个子文件实例(请纠正我,如果我错了,有一种方法)。

我知道它可以填充整个事件数组,但我只需要做一个实例,不需要为数组中的所有事件填充开销。

回答

-2

如果你想填充它手动只是做:

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

这就是我所做的,如果你看看我上面的例子,这是行不通的,这个任务不被猫鼬对象接受。 – 2015-03-18 23:55:53

+0

哦。编辑一秒 – jtmarmon 2015-03-18 23:58:06

0

具有相同问题,因为我的人。此功能现在支持mongoose 4.0。

对于那些在3.x或更低版本上的人,并没有真正的替代解决方案,但可以通过将对象转换为普通的JSON对象来部分实现。

要么通过.toObject().toJSON(),然后做的分配。 但是请注意,您将失去猫鼬功能,因此只有在完全返回客户端之前才能做到这一点。