我试图构造一个mongo查询,它获取满足多个$和条件以及一个或多个$或条件的所有文档。我的方法如下。
$和条件似乎按预期工作,但是当我添加$或时,结果不会改变。如有任何帮助,我们将不胜感激。

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

最佳答案

只需创建一个查询,在该查询中,您只需指定一个逗号分隔的表达式列表,因为它隐式地为您执行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操作
表达式的分隔列表。使用显式的和
当同一字段或运算符必须
在多个表达式中指定。

10-07 14:24