对不起,我无法很好地制定标题。但我的问题是使用查询字符串参数,我想从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,这是默认值。
答案 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);
}