MongoDB中使用多个条件的.find()方法

3
我正在使用Meteor和JavaScript构建一个Web应用程序,并希望基于属性过滤JSON对象。我可以运行fullList.find()来获取所有内容,fullList.find({'Color': 'r'})来获取仅“红色”物品,但我想返回所有“红色”或“蓝色”的物品,并且无法找到正确的语法。我已经尝试了各种组合,例如fullList.find({'Color': 'r' || 'b'})fullList.find({'Color': ('r' || 'b')}),但它要么根本不运行,要么只返回具有单个属性的项目,而不是返回具有任一属性的项目。我觉得这应该是一个很容易解决的问题,只是我不太熟悉JavaScript。

以下是我的(相关)代码,以保证完整性。仅两个条件为真的逻辑失败(而不是一个或三个):

indicadores: function(){
        if (Session.get("displayUrgencies")){
            if (Session.get("displayInsuff")){
                if (Session.get("displayStrengths")){
                    console.log("display all");
                    return fullList.find();
                }
                else {
                    console.log("display urgencies and insufficiencies");
                    return fullList.find({'Color': 'v' || 'r'});
                }
            }
            else {
                if (Session.get("displayStrengths")){
                    console.log("display urgencies and strengths");
                    return fullList.find({'Color': 'b' || 'r'});
                }
                else {
                    console.log("display urgencies");
                    return fullList.find({'Color': 'r'});
                }
            }
        }
        else if (Session.get("displayInsuff")){
            if (Session.get("displayStrengths")){
                console.log("display insufficiencies and strengths");
                return fullList.find({'Color': 'v' || 'b'});
            }
            else {
                console.log("display insufficiencies");
                return fullList.find({'Color': 'v'});
            }
        }
        else if (Session.get("displayStrengths")){
            console.log("display strengths");
            return fullList.find({'Color': 'b'});
        }
        else {
            console.log("display all (default)");
            return fullList.find();
        }       
    },

1
目前的代码中,第二个返回语句永远不会执行。它会在第一个返回语句中计算表达式并返回,从而停止执行。 - James G.
这是我尝试了所有能想到的东西后不小心留下的;如果没有第二个返回,它仍然无法正常工作。我将编辑代码以反映它现在的实际情况;对此感到抱歉。 - Sam Albert
你在使用什么库来进行.find操作? - James G.
1个回答

9

这个.find函数不是JS本身的一部分,它是MongoDB集合的属性。你可以简单地使用$or MongoDB选择器。像这样:

fullList.find({
  $or: [
    {'Color': 'r'},
    {'Color': 'b'}
  ]
})

在你的例子中,fullList是MongoDB集合。您可以在这里了解更多相关信息。

好的,知道这是MongoDB命令非常有帮助,但它仍然不太有效。我收到错误消息:“模板助手中的异常:错误:$and / $or / $nor必须是非空数组”。 - Sam Albert
1
我在那份文档中找到了与你说的非常相近而且对我有用的东西。我的最终解决方案是 fullList.find({Color: {$in: ['v', 'r']}}); 。感谢你的帮助! - Sam Albert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接