stackoverflow社区, 我不经常在mongodb中使用大型对象数组 所以我不知道如何解决这个问题:
1。
我正在处理一个文件,因此很明显,这是一个aggregate
女巫,首先要做一个{$match:{"_id" : ObjectId("5c3f5cb04147b3082648278b") }},
2。 好的,现在我又执行了一个步骤,即$ project + $ filter来过滤掉某些对象,但这并不重要(我认为)
我有一个对象数组,类似于此
{ “ _id”:ObjectId(“ ..”), “数据”: [
{
id : 01,
groupId: 22,
noteId: 876543
},
{
id : 02,
groupId: 33,
noteId: 767676
},
{
id : 03,
groupId: 22,
noteId: 876543
},
{
id : 04,
groupId: 76,
noteId: 876543
}
] }
,但是有成千上万的条目,每个对象有更多的值。
每个groupId可以具有任何noteId,但是相同的组始终具有相同的noteId。 问题:noteId可以在组之间共享。
我添加了这个
{ $project: {
"groupIds": {"$setUnion": "$data.groupId"}
}}
witch给了我所有的groupId 但同时获得所有相关的noteId也很重要,因为 它是一个任意的ID,与其他无关。
是否可以通过指定的字段以某种方式合并对象? 还是有另一种方法来解决这个问题?如果我可以用$ in($ data.groupId,$ setUnion('from from above')过滤对象,我仍然不知道如何仅提取我需要的2个字段。
感谢您的提前帮助
H.M。
答案 0 :(得分:1)
您可以使用以下汇总
db.collection.aggregate([
{ "$unwind": "$data" },
{ "$group": {
"_id": {
"_id": "$_id",
"groupId": "$data.groupId"
},
"noteIds": {
"$push": {
"noteId": "$data.noteId",
}
}
}},
{ "$group": {
"_id": "$_id._id",
"data": {
"$push": {
"groupId": "$_id.groupId",
"noteIds": "$noteIds"
}
}
}}
])