【问题标题】:Convert multiple documents into one documents in MongoDB在MongoDB中将多个文档转换为一个文档
【发布时间】:2021-02-21 07:44:33
【问题描述】:

文档 1:

{
_id: abcdef,
name: "foo",
time: [1234],
doc: [1234]
}

文档 2:

{
_id: alexa,
name: "alexa",
time: [1234],
doc: [1234]
}

预期输出:

{
time[1234],
alexa[1234],
foo[1234]
}

我在 MongoDB 中有多个文档,我想将文档合并为一个文档。

Playground将多个文档合并为一个。

【问题讨论】:

    标签: arrays mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    你可以试试,

    • $addFieldsroot 字段中使用 $arrayToObject 将名称和文档转换为对象
    • $group 使用 $mergeObjects 在根目录中考虑和合并对象
    • $addFields 使用 $reduce$setUnion 从数组数组中获取联合时间的时间
    • $replaceRoot 使用 $mergeObjects 替换根字段和时间字段中的合并对象
    db.collection.aggregate([
      {
        $addFields: {
          root: {
            $arrayToObject: [[{ k: "$name", v: "$doc" }]]
          }
        }
      },
      {
        $group: {
          _id: null,
          root: { $mergeObjects: "$root" },
          time: { $push: "$time" }
        }
      },
      {
        $addFields: {
          time: {
            $reduce: {
              input: "$time",
              initialValue: [],
              in: { $setUnion: ["$$this", "$$value"] }
            }
          }
        }
      },
      {
        $replaceRoot: {
          newRoot: {
            $mergeObjects: ["$root", { time: "$time" }]
          }
        }
      }
    ])
    

    Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2021-05-31
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多