2016-06-08 77 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如果其他条件。当我也按类型查询时,由于各种组合的原因,这会变得更复杂,并且容易出错。

有没有办法避免这样做,我们可以结合mongo查询吗?

+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  
});