【问题标题】:mongodb array aggregation extract to parentmongodb数组聚合提取到父级
【发布时间】:2020-05-05 06:00:53
【问题描述】:

我正在尝试从 mongodb 对象的内部数组中获取第一个日期,并将其添加到它的父级聚合中。示例:

car: {
  "model": "Astra",
  "productions": [
    "modelOne": {
      "dateOfCreation": "2019-09-30T10:15:25.026+00:00",
      "dateOfEstimation": "2017-09-30T10:15:25.026+00:00",
      "someOnterInfo": "whatever"
    },
    "modelTwo": {
      "dateOfCreation": "2017-09-30T10:15:25.026+00:00",
      "dateOfEstimation": "2019-09-30T10:15:25.026+00:00",
      "someOnterInfo": "whatever"
    }
  ]
}

待交

car: {
  "model": "Astra",
  "earliestDateOfEstimation": "2017-09-30T10:15:25.026+00:00",
  "earliestDateOfCreation": "2017-09-30T10:15:25.026+00:00"
}

我怎样才能做到这一点?

【问题讨论】:

    标签: database mongodb nosql aggregate aggregation


    【解决方案1】:

    我假设在您开始聚合时 modelOnemodelTwo 是未知的。关键步骤是运行$map$objectToArray 以消除这两个值。然后你可以使用$min 来获取“最早”的值:

    db.collection.aggregate([
        {
            $addFields: {
                dates: {
                    $map: {
                        input: "$car.productions",
                        in: {
                            $let: {
                                vars: { model: { $arrayElemAt: [ { $objectToArray: "$$this" }, 0 ] } },
                                in: "$$model.v"
                            }
                        }
                    }
                }
            }
        },
        {
            $project: {
                _id: 1,
                "car.model": 1,
                "car.earliestDateOfEstimation": { $min: "$dates.dateOfEstimation" },
                "car.earliestDateOfCreation": { $min: "$dates.dateOfCreation" },
            }
        }
    ])
    

    Mongo Playground

    编辑:

    如果总是有modelOne, 'modelTwo'...(固定数字),第一步可以简化

    db.collection.aggregate([
        {
            $addFields: {
                dates: { $concatArrays: [ "$car.productions.modelOne", "$car.productions.modelTwo" ] }
            }
        },
        {
            $project: {
                _id: 1,
                "car.model": 1,
                "car.earliestDateOfEstimation": { $min: "$dates.dateOfEstimation" },
                "car.earliestDateOfCreation": { $min: "$dates.dateOfCreation" },
            }
        }
    ])
    

    Mongo Playground (2)

    【讨论】:

    • 不,他们不是未知数
    • @IntoTheDeep 好吧,这样会更容易一些
    • 数组有 500 项呢?
    • 嗨,问题是我有多辆车。所以,当我添加输入:“$productions”时,它不起作用
    • 那么您可以编辑您的帖子并显示您的真实数据以及应该如何计算该值吗?
    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2021-12-15
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多