2011-07-27 7 views
1

몽구스에서 메시지 배열을 사용하여 "가입"(올바른 용어가 아님)을 어떻게 알 수 있습니까?node.js를 사용하여 mongoose (mongodb)의 배열에서 "join"하는 방법은 무엇입니까?

I 시도 모든 메시지를 통해 반복하고 사용자 정보를 얻기 위해 쿼리하지만이 작동하지 않습니다 :

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

:이 acieve하는 가장 쉬운 방법은, 비동기 모듈을 사용할 수 있나요? – Awea

답변

1

코드에서 가장 큰 문제는 동기로 실행되도록 코드를 가정한다는 것입니다. 비동기 적으로 실행됩니다. 그래서 메시지가 아직 당신이

console.log(messages); 

이 대신 같은 것을 할 실행할 때 설정되지 않은 :

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

편집 좋아, 난을 참조하십시오. 다른 메시지에 userInfo를 추가하려고합니다. 당신은 새로운 배열에 메시지 VAR를 밀거나 메시지의 내파을 만들고 싶어 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', user : {여기 사용자 정보}, ....] –

+0

@ guy-guy 좋아, 처음에는 이것을 얻지 못했다. 내 대답을 편집했습니다. – pkyeck

관련 문제