【问题标题】:Mongo $expr return when delta of 2 fields exceeds 20%当 2 个字段的 delta 超过 20% 时,Mongo $expr 返回
【发布时间】:2022-02-18 00:24:38
【问题描述】:

这将返回field1 大于field2 的文档

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

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

类似的东西。

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

不是在寻找聚合解决方案

【问题讨论】:

    标签: mongodb mongodb-query bson


    【解决方案1】:

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

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

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

    Mongo Playground

    【讨论】:

    • 如果我的领域之一很深。我会这样写吗"$subtract": [ "$pirce", "$meta.amzItem.recommended" ]
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2013-01-01
    • 2021-03-18
    • 2014-09-05
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多