为什么用 $not 反转条件会返回不同的结果?

问题描述 投票:0回答:1

我正在 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
    ]
  }
]
mongodb
1个回答
0
投票

条件

{ 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 ] }

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.