2014-05-25 2 views
0

조직과 컬렉션이 있습니다. 각 조직에는 회원이 있습니다. 사용자가 해당 조직의 구성원인지 확인하기 위해 쿼리를 실행하고 싶습니다.개체 배열에서 쿼리 된 요소 만 검색하십시오.

mongoose.model('organization').find({orgId: paramOrgId}, function(err, organization){ 
     organization.find({'members.user':req.user._id}, function(err, user){ 
     if(!user) res.send(401) //The user is not a member in organization 

     if(user) res.send(200); 

     }); 

    } 
    return res.send(401); 
    }); 

은 분명히 당신이 콜백에 '찾기'가 없습니다 :

나는이 시도. 대신 어떻게해야합니까? 조직 문서의

예 : 당신은 단지 사용자가 조직의 구성원 인 경우 확인하려면 여기

> db.organizations.find().forEach(printjson); 
{ 
    "_id" : ObjectId("5381d5d11409f125475fcc90"), 
    "orgId" : 5, 
    "title" : "ExampleCorp", 
    "members" : [ 
     { 
      "tier" : 1, 
      "user" : ObjectId("5381d5d11409f125475fcc8c") 
     }, 
     { 
      "tier" : 2, 
      "user" : ObjectId("5381d5d11409f125475fcc8d") 
     }, 
     { 
      "tier" : 3, 
      "user" : ObjectId("5381d5d11409f125475fcc8e") 
     } 
    ] 
} 
+0

'organization' 문서 예제를 포함하도록 질문을 편집 할 수 있습니까? – JohnnyHK

+0

이것은 단일 쿼리에서만 수행 할 수 있다고 생각합니다. http://stackoverflow.com/questions/3985214/mongodb-extract-only-the-selected-item-in-array/12241733#12241733을 참조하십시오. – Foreever

답변

0

그것은 하나 개의 쿼리입니다.

// Use findOne so that it returns one document instead of a collection 
mongoose.model('organization').findOne({ 
    // Instead of querying twice, just set both conditions 
    'orgId': paramOrgId, 
    'members.user':req.user._id 
}, 
'_id', // We'll just select the _id field. We don't need the whole organization document 
function (err, org) { 
    if (err) 
     return res.send(500); // Error! 

    if (org) 
     return res.send(200); 
    else 
     return res.send(401); 
}); 
관련 문제