gpt4 book ai didi

MongoDb 聚合框架对内部数组的元素进行分组

转载 作者:行者123 更新时间:2023-12-02 21:38:03 27 4
gpt4 key购买 nike

我正在使用 MongoDB 聚合框架尝试转换每个文档:

{
"all": [
{
"type": "A",
"id": "1"
},
{
"type": "A",
"id": "1"
},
{
"type": "B",
"id": "2"
},
{
"type": "A",
"id": "3"
}
]
}

进入此:

{
"unique_type_A": [ "3", "1" ]
}

(最终结果是具有unique_type_A字段的n个文档的集合)

计算包括在数组中返回 A 类型实体的所有唯一类型。

我被 $group 步骤卡住了,有人知道该怎么做吗?

最佳答案

要将此逻辑应用于每个文档,您可以使用以下内容;

db.collection.aggregate([
{
$unwind: "$all"
},
{
$match: {
"all.type": "A"
}
},
{
$group: {
_id: {
"type": "$all.type",
"oldId": "$_id"
},
unique_type_A: {
$addToSet: "$all.id"
}
}
},
{
$project: {
_id: 0
}
}
])

我们首先去哪里$unwind ,能够过滤和使用 all 数组的每个成员。然后我们只过滤非 type:"A" 成员。 $group stage 与复杂的 _id 不同,我们利用 $unwind 结果的 _id,它引用回原始文档,这样我们可以根据原始文档对结果进行分组。使用 $addToSetall 数组收集 id只保留唯一的值,瞧!

这是每个文档的结果;

[
{
"unique_type_A": [
"3",
"1"
]
},
{
"unique_type_A": [
"4",
"11",
"5"
]
}
]

以交互方式检查 Mongoplayground 上的代码

关于MongoDb 聚合框架对内部数组的元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332327/

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