2014-10-07 2 views
-1

데이터베이스 쿼리을 쿼리하기 전에 매개 변수를 검사하기 위해 조건문을 쓰지 않으려 고합니다. 이렇게 여러 번 비슷한 쿼리를 작성할 필요는 없지만 하나의 쿼리 만 작성해야합니다.mongodb 쿼리 내에서 매개 변수 테스트

그래서 내 첫 번째 쿼리가

db.results.find({ travel_class : "first" } }) 

하고 반환 여러 문서

내 두 번째 쿼리는

var travel_class_filter = "all"; 
db.results.find({'$and' : [ { travel_class_filter : "all"} , { travel_class : "first" } ]}) 

과 같은 0 문서 대신 반환 넘버 두 번째 쿼리의 문서 표시

이유를 알고 계십니까?

+0

당신이 뭘 하려는지 명확하게 할 수 있습니까? – JohnnyHK

+0

travel_class_filter라는 1 개의 매개 변수에 따라 쿼리가 있습니다. 이 매개 변수를 'all'로 설정하면 travel_class 열을 필터링하지 않습니다. 그래서 나는 대신 "if (travel_class_filter == 'all') {db.results.find ({})} else {db.results.find ({travel_class : travel_class_filter}})}}}와 같은 단일 쿼리를 작성하려고합니다. 내 쿼리를해야한다고 생각 : db.results.find ({ '$ or': [{travel_class_filter : "all"}, {travel_class : travel_class_filter}}}))하지만 작동하지 않습니다 –

답변

1

당신은 당신의 쿼리의 일환으로 매개 변수를 테스트 할 수 없습니다,하지만 당신은 프로그래밍 방식으로 쿼리 개체를 구축하여이 작업을 수행 할 수 있습니다 :

var query = {}; 
if (travel_class_filter != 'all') { 
    query.travel_class = travel_class_filter; 
} 
db.results.find(query);