2015-03-18 88 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(),然後做的分配。 但是請注意,您將失去貓鼬功能,因此只有在完全返回客戶端之前才能做到這一點。