gpt4 book ai didi

mongodb - 如何将两个数组转换为 mongoDB 中的对象,其中第一个数组具有多个相同的值

转载 作者:行者123 更新时间:2023-12-03 17:09:15 24 4
gpt4 key购买 nike

在使用 mongo 聚合进行一些处理后,我有一个类似的集合:

[{
field1: 10,
field2: 50,
field3: {
name: ["a","b","a","a"],
value: [1,2,3,4]
}
},...]
我正在努力寻找一种方法将其转换为:
[{
field1: 10,
field2: 50,
a:[1,3,4],
b:[2]
},...]
在 mongoshell 或指南针中使用 mongo 聚合

最佳答案

所以这个想法是:

  • field3 中选择一个数组说 name生成数组范围 [0, 1, 2, 3] .
  • 循环 namevalue array 同时得到一个数组 { k: "", v: "" } .
  • $unwind用于分组的前一阶段的数组。
  • 按关键字分组 field3.k累积所有值 field3.v .
  • 再次分组 null生成模式数组 { k: "", v: "" } .
  • 连接 field1field2从前一阶段进入数组。
  • 最后使用 $arrayToObject 将数组转换为对象.

  • 尝试这个:
    db.testCollection.aggregate([
    {
    $addFields: {
    field3: {
    $map: {
    input: { $range: [0, { $size: "$field3.name" }] },
    as: "index",
    in: {
    k: { $arrayElemAt: ["$field3.name", "$$index"] },
    v: { $arrayElemAt: ["$field3.value", "$$index"] }
    }
    }
    }
    }
    },
    { $unwind: "$field3" },
    {
    $group: {
    _id: "$field3.k",
    field1: { $first: "$field1" },
    field2: { $first: "$field2" },
    k: { $first: "$field3.k" },
    v: { $push: "$field3.v" }
    }
    },
    {
    $group: {
    _id: null,
    field1: { $first: "$field1" },
    field2: { $first: "$field2" },
    array: {
    $push: { k: "$k", v: "$v" }
    }
    }
    },
    {
    $addFields: {
    array: {
    $concatArrays: [
    [{ k: "field1", v: "$field1" }, { k: "field2", v: "$field2" }],
    "$array"
    ]
    }
    }
    },
    {
    $replaceRoot: {
    newRoot: { $arrayToObject: "$array" }
    }
    }
    ]);
    输出
    {
    "field1" : 10,
    "field2" : 50,
    "a" : [
    1,
    3,
    4
    ],
    "b" : [
    2
    ]
    }

    关于mongodb - 如何将两个数组转换为 mongoDB 中的对象,其中第一个数组具有多个相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66820602/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com