2016-06-08 4 views
2

아래는 내 MongoDB의 컬렉션에서 문서의 예입니다 결합 :MongoDB의 쿼리

{ 
    "countries": ["IN", "US", "UK"], 
    "regions": ["North", "South", "East", "West"], 
    "types": ["A", "C"], 
    "doc": { 
    "prop" : "value" 
    } 
} 

입력 매개 변수 및 세션 정보를 바탕으로, 내가 국가, 지역 및 유형을 조회 할 수 있습니다. 이 원하는 국가 및 지역에 따라 쿼리에 대한 내 자바 스크립트 코드 :

if(inputCountry && !inputRegion) { 
    db.collection.find({countries: inputCountry}, callback); 
} else if(!inputCountry && inputRegion) { 
    db.collection.find({regions: inputRegion}, callback); 
} else if(inputCountry && inputRegion) 
    db.collection.find({countries: inputCountry, regions: inputRegion}, callback); 
} else { 
    db.collection.find({}, callback); 
} 

당신은 이미 국가와 지역 4 경우 - 다른 조건을 가지고있어시피. 또한 유형별로 쿼리 할 때 다양한 조합으로 인해 더 복잡해지고 오류가 발생하기 쉽습니다.

이렇게하는 것을 피하는 방법이 있습니까? 그리고 mongo 쿼리를 결합 할 수 있습니까?

+0

이러한 입력 매개 변수의 출처는 어디입니까? 그것들이'req.query' 또는'req.params' 객체에 있다면, 조건문을 사용하지 않고 쿼리를 구조화 할 수있는 방법이 있습니다. – chridam

+0

두 개는 req.query의 것이고 다른 한 개는 req.session의 것입니다. 조건없이이 작업을 수행하는 방법은 무엇입니까? –

답변

0

if JavaScript를 사용하여 다음과 같이 개체를 만들 수 있습니다.

// The condition in the query 
var condition = {}; 

// If exists, add to the condition 
if (inputCountry) { 
    condition.countries = inputCountry; 
} 
if (inputRegion) { 
    condition.regions = inputRegion; 
} 

// Execute query 
db.collection.find(condition, callback); 
0

당신은 조건에 따라 쿼리를 작성하고 모든 작업이 완료되면 찾을 수 있습니까 : -

var findQuery ={}; 
if(inputCountry && !inputRegion) { 
    findQuery = {countries: inputCountry}; 
} 
else if(!inputCountry && inputRegion) { 
    findQuery = {regions: inputRegion}; 
} 
else if(inputCountry && inputRegion) 
    findQuery = {countries: inputCountry, regions: inputRegion}; 
} 

지금 발견을한다.

db.collection.find(findQuery).toArray(function(err, result)  
{ 
     console.log(result); //Array of objects  
});