【问题标题】:MongoDB alternatives for $expr in aggregation query for older Mongo versionsMongoDB 在旧 Mongo 版本的聚合查询中替代 $expr
【发布时间】:2020-07-23 08:40:35
【问题描述】:

我有 Mongo 3.4 版,我正在尝试使用为较新的 Mongo 版本编写的查询,但发现不支持 $mergeObjects。我不确定可以用什么代替。

我创建了一个 Mongo 游乐场 - https://mongoplayground.net/p/-mplhGT0WtI

以下是我需要重写但不知道如何重写的。

{
    $group: {
      _id: {
          id: "$_id",
          name: "$name"
      },
      root: {
          $mergeObjects: "$$ROOT"
      },
      questions: {
          $push: "$questions"
      }
    }
}

有什么想法吗?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    也许有更好的方法,但想到的一种解决方法是使用$setUnion,然后检查数组大小是否为 1:

    ...
    
      {
        $addFields: {
          unionSize: {
            $size: {
              $setUnion: [
                [
                  "$responses.questionId"
                ],
                [
                  "$set.questions.id"
                ]
              ]
            }
          }
        }
      },
      {
        $match: {
          unionSize: 1
        }
      }
    
    ...
    

    MongoPlayground

    【讨论】:

    • 谢谢。我已经更新了 Mongo 操场以使用 $addFields - mongoplayground.net/p/-mplhGT0WtI - 但仍然遇到 $mergeObjects 的问题。
    • 只需将其更改为使用$last$first 而不是$mergeObjects
    • 谢谢。我已经能够通过使用 $mergeObjects 来做到这一点,但它也被用于组合以下内容 - { $replaceRoot: { newRoot: { $mergeObjects: [ "$root", "$$ROOT" ] } } } 其中我不能将 $first 或 $last 用于 - mongoplayground.net/p/O6USu8yhyfm
    • 没有什么可以代替$mergeObjects,你只需要手动替换为$addFieldsmongoplayground.net/p/EARPKM1kAT4
    猜你喜欢
    • 2021-12-24
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2017-05-02
    • 2019-06-18
    • 2021-09-03
    • 2017-08-06
    相关资源
    最近更新 更多