我试图构造一个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操作
表达式的分隔列表。使用显式的和
当同一字段或运算符必须
在多个表达式中指定。