2017-12-11 3 views
0

몽구스에서 두 개의 쿼리를 하나로 결합하려고합니다.몽구스에서 한 번에 여러 개의 쿼리 실행

User.find({ _id: req.body.userId }, (err, user) => { 
    User.find({ username: decodedUser.username }, (err, member) => { 
    console.log("user\n", user) 
    console.log("member\n", member) 
}) 
}) 

나는 데이터베이스에 하나의 User.find() 쿼리를하고 싶습니다, 그 결과는 모든 객체 (또는 배열) 수 :

지금

, 나는이 일을 해요 이 경우 [user, member]의 배열과 같이 원하는 문서. 이렇게하면 User.find()을 두 번 실행하지 않아도됩니다. 이상적으로는 쿼리의 결과를 객체로 지정하여 특정 키/값 집합을 더 쉽게 찾을 수있게하고 싶습니다. 특정 요소를 찾기 위해 반복해야하는 배열과는 반대입니다. 어떻게해야합니까?

참고 :이 작동합니다 results 내가 원하는 문서의 배열 인

User.find({ $or: 
    [ 
    { _id: req.body.userId }, 
    { username: decodedUser.username} 
    ]}, (err, results) => { 
    console.log("results\n", results) 
}) 

. 그러나 더 좋은 방법이 있는지 알고 싶습니다.

답변

1

두 조건에서 하나의 결과 만 기대하는 경우 User.findOne을 사용할 수 있습니다. 첫 번째로 발견 된 결과가 반환됩니다. 당신이이 개 결과를 얻을 필요가 있고 당신이 병렬로 2 개 쿼리를 실행할 수있는 결과에 다음 갖고 싶어하고 사용이 결과를 얻기 위해 약속했다 이후

User.findOne({ $or: 
    [ 
    { _id: req.body.userId }, 
    { username: decodedUser.username} 
    ]}, (err, user) => { 
    console.log("user\n", user) 
}) 

편집

. 예 :

Promise.all([ 
    User.find({ _id: req.body.userId }), 
    User.find({ username: decodedUser.username}) 
]).then(([ user, member ]) => { 
    console.log(util.format("user=%O member=%O", user, member)); 
}); 
+0

답장을 보내 주셔서 감사합니다. 나는 실제로 두 가지 결과를 기대하고 있습니다. 최종 목표는 위의 예제 에서처럼 User.find()를 두 번 실행하는 대신 두 번의'User.find()'쿼리를 한 번 실행하는 것입니다. – Farid

+0

그러면 내 솔루션이 내게 가장 좋아 보인다 – Zilvinas

+0

예! 귀하의 "편집"은 * 정확하게 * 내가하려고했던 것입니다. 오, 고마워요! – Farid

관련 문제