Mongo $ OR嵌套在$ AND中

时间:2015-04-23 15:55:11

标签: mongodb meteor

我正在尝试构建一个Mongo查询,该查询可以获得满足多个$ AND条件以及一个或多个$ OR条件的所有文档。我的方法如下。

$ AND条件似乎按预期工作,但是当我添加$ OR时,结果不会改变。任何帮助表示赞赏。

Collection.find({
    $and:[
      {lat: { $ne:""}},
      {lon: { $ne:""}},
      {type : "foo"},            
      {keywords:{ $regex : "bar", $options:"i" }},
      { $or:[
        {isOpen : "True"},
        {isOpen : "False"},              
        {price : { $gte: 0}},
        ]
      },
    ]
  }
)

1 个答案:

答案 0 :(得分:1)

只需创建一个查询,您只需指定逗号分隔的表达式列表,因为它隐式为您执行AND操作。然后,您可以在列表中包含或查询,如下所示:

var query = {
    lat: { $ne: ""},
    lon: { $ne:"" },
    type: "foo",            
    keywords: { $regex : "bar", $options:"i" },
    $or: [
        { isOpen: "True"},
        { isOpen: "False"},              
        { price: { $gte: 0}},
    ]
};

Collection.find(query);

您可以参考 docs

  

MongoDB在指定逗号时提供隐式AND操作   分隔的表达式列表。使用显式AND与$和   当相同的字段或操作符必须时,操作符是必需的   在多个表达式中指定。