结合MongoDB查询

下面是我的MongoDB集合中的一个文档的例子:

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

根据input参数和会话信息,我必须查询国家,地区和types。 我的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条件。 当我也按types查询,由于各种组合,这将变得更复杂,并得到非常容易出错。

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

你可以使用JavaScript if创build一个对象如下。

 // 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); 

你可以build立基于条件的查询,并find一旦一切都完成:

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