我正在 mongoplayground 上测试这个。为什么这两个查询返回不同的结果?
第一次查询
db.collection.find({
"key": {
$gte: 88
}
})
第二个查询:用
$not
反转条件
db.collection.find({
"key": {
"$not": {
$lt: 88
}
}
})
通常,当字段为数组时,数组匹配只需匹配一个元素即可。然而,在这个查询中,似乎需要匹配每个数组元素才能进行数组匹配。
我的示例数据集:
[
{
"key": [
87,
88
]
},
{
"key": [
88,
89
]
},
{
"key": [
86,
90
]
},
{
"key": [
93,
89,
71
]
}
]
条件
{ key: { $gte: 88 } }
对于这些元素来说是正确的。
{ key: [ 87, *88* ] } -> true
{ key: [ *88*, *89* ] } -> true
{ key: [ *86*, *90* ] } -> true
{ key: [ *93*, *89*, 71 ] } -> true
因此所有文件都被退回
条件
{ key: { $lt: 88 } }
对于这些元素来说是正确的。
{ key: [ *87*, 88 ] } -> true
{ key: [ 88, 89 ] } -> false
{ key: [ *86*, 90 ] } -> true
{ key: [ 93, 89, *71* ] } -> true
使用条件
$not: {...}
仅返回 { key: [ 88, 89 ] }