检查是否存在多个字段,如果没有返回MongoDB中的所有项目

时间:2015-11-19 23:08:04

标签: javascript mongodb query-string

对不起,我无法很好地制定标题。但我的问题是使用查询字符串参数,我想从Mongo集合中返回相应的注册文档。假设我输入了这个网址:

myurl.com/getbooks?lang=en&cat=fiction&x=y

然后我将所有查询参数从客户端传递到options对象中的服务器,如下所示:

options = {lang: 'en', cat: 'fiction', x: 'y'}

因此,当我在服务器中收到options对象时,我将使用其字段运行代码以找到用于检索相关书籍的匹配项:

var lang = options.lang;
var cat = options.cat;
var x = options.x;

Books.find({book_language: lang, book_category: fiction, x: x })

这很有效,除了一个非常明显的情况,即如果没有为任何一个或所有字段输入查询参数; Mongo不返回任何文档,而应返回all。因为该字段是未定义的。当然,我可以详尽地编写一个遍历所有可能性的长if else函数,但我有4个不同的参数,总共有12个不同的场景。所以它不是一个优雅的解决方案(但我在服务器中还有几个条件要添加)。

因此,我需要一个模块化检查是否未为任何字段输入查询的解决方案,然后返回all,这是默认值。

1 个答案:

答案 0 :(得分:1)

这不是那么优雅,也不是很快,但比写12条语句更好:

var obj = {a: void 0, b: 1, c: 2};
var filled = Object.keys(obj).filter(function(key) { 
  return obj[key] !== void 0;  
}); 
console.log(filled); // ["b", "c"]
if (filled.length === 3) { 
  Book.find(obj); 
}