【发布时间】:2018-10-24 01:13:49
【问题描述】:
查询数组时是否可以使用$and和$or逻辑运算符?
因为当我创建一个包含 2 个文档的集合时
db.inventory.insertMany([
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 25 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 50 ] }
]);
查询
db.inventory.find( { dim_cm: {$or: [ {$gt: 49}, {$size: 1} ] } } )
结果是错误unknown operator $or。
我可以将查询重写为
db.inventory.find( { $or: [{dim_cm: {$gt: 49}}, {dim_cm: {$size: 1}}] } )
但为什么第一个查询变体无效?
【问题讨论】:
-
它无效,因为这不是在 MongoDB 中使用
$or聚合运算符的正确语法。只要使用正确的语法,就可以同时使用$and和$or运算符。例如,您可以将 2 个$or语句放在$and内。 -
因为它无效并且文档清楚地说明了它。
$or不适用于“字段”,而是“查询条件列表”,“任一”可以作为匹配项应用。因此,为什么它是一个数组。您可以使用$in来“速记”简单值,即dim_cm: { $in: [10,25] }选择两个匹配的文档。但是“其他表达式”需要数组。老实说,documentation$oris pretty clear. -
我仍然不完全清楚的是文档中使用的 expression 和 query 之间的区别。因为如果我使用
$or结果是查询?所以我可以在$elemMatch中使用$or,因为它需要一个查询?
标签: mongodb