以下是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个if-else条件。当我也按类型查询时,由于各种组合会变得更加复杂并且容易出错。
有没有办法避免这样做,我们可以合并mongo查询吗?
答案 0 :(得分: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);
答案 1 :(得分: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
});