当所述数组具有相同的 _id 时,在 mongodb 中的数组中组合数组
Combining arrays within an array in mongodb when said arrays have the same _id
我正在使用 mongodb 进行一个项目,在一个数组中,我目前得到两个具有相同 _id
的数组。我想合并这两组数据。我目前得到的是:
"items": [
{
"_id": "Red",
"15-17": 1
},
{
"_id": "Bliss",
"15-17": 2
},
{
"_id": "Green",
"18-25": 1
},
{
"_id": "Bliss",
"18-25": 2
}
]
我想得到什么:
"items": [
{
"_id": "Red",
"15-17": 1
},
{
"_id": "Bliss",
"15-17": 2,
"18-25": 2
},
{
"_id": "Green",
"18-25": 1
},
]
对于如何执行此操作的任何帮助或建议,我将不胜感激。
您可以通过几种不同的方式实现这一点,这是我认为最简单的解决方案。
我们将展开项目数组,然后对每个项目进行分组 item._id
,这将使我们能够“合并”来自不同值的所有值。
最终我们会恢复原来的结构,像这样:
db.collection.aggregate([
{
$unwind: "$items"
},
{
$group: {
_id: "$items._id",
values: {
$push: "$items"
},
id: {
$first: "$_id"
}
}
},
{
$addFields: {
values: {
$reduce: {
input: "$values",
initialValue: {},
in: {
"$mergeObjects": [
"$$this",
"$$value"
]
}
}
}
}
},
{
$group: {
_id: "$id",
items: {
$push: "$values"
}
}
}
])
我正在使用 mongodb 进行一个项目,在一个数组中,我目前得到两个具有相同 _id
的数组。我想合并这两组数据。我目前得到的是:
"items": [
{
"_id": "Red",
"15-17": 1
},
{
"_id": "Bliss",
"15-17": 2
},
{
"_id": "Green",
"18-25": 1
},
{
"_id": "Bliss",
"18-25": 2
}
]
我想得到什么:
"items": [
{
"_id": "Red",
"15-17": 1
},
{
"_id": "Bliss",
"15-17": 2,
"18-25": 2
},
{
"_id": "Green",
"18-25": 1
},
]
对于如何执行此操作的任何帮助或建议,我将不胜感激。
您可以通过几种不同的方式实现这一点,这是我认为最简单的解决方案。
我们将展开项目数组,然后对每个项目进行分组 item._id
,这将使我们能够“合并”来自不同值的所有值。
最终我们会恢复原来的结构,像这样:
db.collection.aggregate([
{
$unwind: "$items"
},
{
$group: {
_id: "$items._id",
values: {
$push: "$items"
},
id: {
$first: "$_id"
}
}
},
{
$addFields: {
values: {
$reduce: {
input: "$values",
initialValue: {},
in: {
"$mergeObjects": [
"$$this",
"$$value"
]
}
}
}
}
},
{
$group: {
_id: "$id",
items: {
$push: "$values"
}
}
}
])