首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB 5版本聚合转换为4.4版本

MongoDB 5版本聚合转换为4.4版本
EN

Stack Overflow用户
提问于 2022-09-14 13:07:57
回答 1查看 33关注 0票数 0

下面的聚合由MongoDB 5支持,但不支持4.4。我如何用v4.4来写这个呢?

聚集管道(V5):

代码语言:javascript
复制
 "$ifNull": [
                    {
                      "$getField": {
                        "field": "prices",
                        "input": {
                          "$first": "$matchedUsers"
                        }
                      }
                    },
                    []
                  ]

这是一个相同的MongoDB游乐场

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-14 17:01:33

这个管道应该在4.4版本中工作:

代码语言:javascript
复制
db.datasets.aggregate([
  {
    "$lookup": {
      "from": "users",
      "localField": "assignedTo",
      "foreignField": "id",
      "as": "matchedUsers"
    }
  },
  {
    "$addFields": {
      "cgData": {
        "$first": "$matchedUsers"
      }
    }
  },
  {
    "$addFields": {
      "cgData": {
        "$first": {
          "$filter": {
            "input": {
              "$ifNull": [
                "$cgData.prices",
                []
              ]
            },
            "as": "currentPrice",
            "cond": {
              "$and": [
                {
                  "$gte": [
                    "$firstBillable",
                    "$$currentPrice.beginDate"
                  ]
                },
                {
                  $or: [
                    {
                      $eq: [
                        {
                          $type: "$$currentPrice.endDate"
                        },
                        "missing"
                      ]
                    },
                    {
                      "$lt": [
                        "$firstBillable",
                        "$$currentPrice.endDate"
                      ]
                    }
                  ]
                }
              ]
            }
          }
        }
      }
    }
  },
  {
    "$addFields": {
      cgPrice: "$cgData.price"
    }
  },
  {
    "$project": {
      cgData: 0,
      "matchedUsers": 0
    }
  }
])

在此中,增加了一个新的$addFields阶段,以获得matchedUsers数组的第一个元素。

代码语言:javascript
复制
  {
    "$addFields": {
      "cgData": {
        "$first": "$matchedUsers"
      }
    }
  }

然后我们像这样使用$ifNull

代码语言:javascript
复制
{
   "$ifNull": [
          "$cgData.prices",
          []
        ]
}

看到它在运行这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73717420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档