gpt4 book ai didi

java - 使用 mongo 聚合合并文档中的数组

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:57 25 4
gpt4 key购买 nike

我有一个要求,我需要对两条记录进行聚合,这两条记录都有两个具有不同值的数组字段。我需要的是,当我对这些记录进行聚合时,结果应该有一个数组,其中包含来自两个不同数组的唯一值。这是示例:

第一条记录

 { Host:"abc.com" ArtId:"123", tags:[ "tag1", "tag2" ], msg:["msg1", "msg2"] }

第二条记录

{ Host:"abc.com" ArtId:"123", tags:[ "tag2", "tag3" ], msg:["msg2", "msg3"]  }

在主机和 artid 上聚合后,我需要这样的结果:

 { Host: "abc.com", ArtId: "123", count :"2", tags:[ "tag1", "tag2", "tag3" ],msg:["msg1","msg2", "msg3"] }

我试过$addToset在小组声明中,但它给了我这样的标签:[["tag1","tag2"],["tag2","tag3"]] msg:[["msg1","msg2"],["msg2","msg3"]]

您能否帮助我如何在聚合中实现此目的,或者我应该使用代码来解析我的java代码中的数组,以从嵌套数组创建单个数组,因为我认为对于两个数组字段,我需要多次进行聚合

最佳答案

您可以先使用$unwind来解决这个问题

所以

db.collection.aggregate([...,
{$unwind:"$tags"},
{$unwind:"$msg"},
{$group: { ..., tags:{ $addToSet: "$tags" },
msg:{ $addToSet: "$msg" },...}},
...])

作为解释:$addToSet 根据您放入其中的唯一值创建一个数组。在您的情况下,这些是数组,因此它构建了一个数组的数组。

$unwind 运算符通过为该数组中的每个值创建文档的副本来展开数组,该副本仅包含该值而不包含该数组(例如 tags:tag1)。因此 $addToSet 获取单个值而不是数组来构建到新数组中。

关于java - 使用 mongo 聚合合并文档中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906641/

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