结合MongoDB查询

时间:2016-06-08 10:44:59

标签: javascript node.js 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个if-else条件。当我也按类型查询时,由于各种组合会变得更加复杂并且容易出错。

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

2 个答案:

答案 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    
});