Mongo $expr return 当 2 个字段的增量超过 20% 时

Mongo $expr return when delta of 2 fields exceeds 20%

这将 return 文档,其中 field1 大于 field2

collection.find( { $expr: { $gt: [ "$field1" , "$field2" ] } } )

我想获取 field1field2 之间的差异大于或小于 20 的文档。可以做到吗?

像这样。

{
  match: {
    $expr: {
      {
        $expr: {
          $gt: [
            $subtract: ["$field1", "$field2"], 20
          ]
        }
      }
    }
  }
}

不寻找聚合解决方案

是的,您可以使用与您已经在做的类似的查询,您只需检查两种方式 field1 - field2 > 20field2 - field1 > 20

您可以使用 $abs (absolute(field1 - field2) > 20) 轻松实现此目的,如下所示:

db.collection.find({
  $expr: {
    $gt: [
      {
        $abs: {
          $subtract: [
            "$field1",
            "$field2"
          ]
        }
      },
      20
    ]
  }
})

Mongo Playground