正如文档中所述,这是不可能的。
使用相同运算符指定多个表达式的AND查询
考虑以下示例:
db.inventory.find( {
$and : [
{ $or : [ { price : 0.99 }, { price : 1.99 } ] },
{ $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
]
} )
以下查询将返回所有符合以下条件的文档:
价格字段值等于0.99或1.99,且销售字段的值为true或者数量字段的值小于20。
由于使用了多个$or运算符,因此无法使用隐式AND操作构建此查询。
如何解决这样的查询问题?MongoDB 3.2上没有返回结果。我已经分别测试了$or块,并且它们可以正常工作,但在$and块中包含它们时却不行。我认为我并没有错误地阅读文档,这不应该起作用。我唯一的替代方案是将数据推送到ElasticSearch并在那里查询,但这也只是一个解决方法。
{
"$and": [
{
"$or": [
{
"title": {
"$regex": "^.*html .*$",
"$options": "i"
}
},
{
"keywords": {
"$regex": "^.*html .*$",
"$options": "i"
}
}
]
},
{
"$or": [
{
"public": true
},
{
"domain": "cozybid"
}
]
}
]
}