2011-07-27 64 views
1

你怎麼做一個「加入」(我知道這不是一個正確的術語)與貓鼬中的消息數組?你如何做一個「連接」在一個數組在mongoose(mongodb)與node.js?

我試圖遍歷所有的消息和查詢,以獲取用戶信息,但它不工作:

messages.forEach(function (message, index) { 
    User.findById(message.userId, function (err, user) { 
    messages[index].user = user 
    }) 
}) 

console.log(messages) // the user info is not attatched 

那麼這是怎麼實現與貓鼬和node.js的?

+0

你想將郵件推VAR到一個新的陣列或使消息的破滅? – Awea

回答

1

你的代碼最大的問題是,你假設代碼同步運行 - 但事實並非如此。它異步運行。這樣的消息尚未設置,當你執行

console.log(messages); 

做這樣的事情,而不是:

var userIds = [id1, id2, id3]; 
User.find({"_id": {$in: userIds}}, function (err, users) { 
    console.log(users); 
}); 

編輯 好,我看看。你想添加userInfo到不同的消息。到acieve這種 最簡單的方法,就是使用異步模塊:https://github.com/caolan/async

async.map(messages, getUserInfo, function (err, result) { 
    if (err) { 
    console.log(err); 
    return; 
    } 
    // log all msg with userinfo 
    console.log(result); 
}); 

function getUserInfo (msg, callback) { 
    User.findById(msg.userId, function (err, user) { 
    if (err) { 
     callback(err); 
     return; 
    } 
    msg.user = user; 
    callback(null, msg); 
    }); 
} 
+0

是的,「$ in」找到發送這些消息的用戶列表,但我想不出一種簡單的方式將它添加到消息中,以代替[{message:'blah',userId:'dsfsdf' },....]這將是[{message:'blah',用戶:{用戶信息在這裏},....] –

+0

@傢伙人確定,沒有得到這個乍一看。編輯我的答案。 – pkyeck

相關問題