2
我有一個模式命名爲如下所示的消息;如何在貓鼬中設置objectId屬性?
Message = new Schema({
id: Number,
sender: ObjectId,
receiver: ObjectId,
date: Date,
content: String,
type: Number
});
和下面的User模式;
User = new Schema({
id: Number,
username: String,
isOnline: Boolean
});
我想在收到新消息時設置消息項目的發送者和接收者屬性。收到消息時,我正在創建一個新的消息文檔並設置其屬性。但我不知道如何設置發送者和接收者屬性(這應該是對用戶文檔中實體的引用)。我使用的代碼如下所示。您可以儘可能多地判斷代碼,這就是我想要的。我不知道擺脫它的正確方法。但似乎這不是那個。當我使用下面的代碼時,我看不到發送者和接收者屬性已設置。我認爲這可能是因爲findOne是異步的(我不知道它是否是)。
var m = new Message();
m.content = messageData.text;
m.id = messageId;
User.findOne({id: socket.userId}, function (e, o) {
m.sender = o;
});
User.findOne({id: messageData.userId}, function (e, o) {
m.receiver = o;
});
m.save(function (e) {
if (!e) {
console.log("message is saved to the mongodb...");
}
});
如果你能說出正確的方法來做到這一點,那將是一件好事。
在此先感謝。
謝謝!我瞭解你的方法。但該方法似乎有點混亂。這是做到這一點的唯一方法嗎?因爲可能會有更多的字段,如發件人和收件人。我是否應該爲他們每個人做同樣的事情?沒有任何和像m.sender = new User({id:socket.userId}); ? – 2012-04-19 08:36:54
正如我已經研究了一些,我發現了一個node.js的異步插件,它與您在其他未來期間提出的一樣。猜猜,在那裏似乎沒有任何其他解決方案。 – 2012-04-19 10:01:34