2016-06-08 7 views
2

Ниже приведен пример документа в моей коллекции MongoDB:комбинат MongoDB Запросы

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

На основании для входных параметров и информации сеанса, я должен запросить страны, регионы и типы. Мой код JavaScript, чтобы для запросов по странам и регионам хотелось бы это:

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, если-иначе условия для стран и регионов. Когда я также запрашиваю по типу, это становится более сложным из-за различных комбинаций и становится очень подверженным ошибкам.

Есть ли способ избежать этого, и мы можем объединить запросы манго?

+0

Откуда берутся эти входные параметры? Если они из объекта 'req.query' или' req.params', тогда вы можете структурировать свой запрос без использования условных операторов. – chridam

+0

два из req.query и один из req.session. как это сделать без условностей? –

ответ

0

Вы можете использовать JavaScript if и создать объект следующим образом.

// 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  
}); 
Смежные вопросы