我有一个问题,使用聚合自动取消引用子对象,并保持列表顺序。第一:我的数据模型。让我们将其分解为两个集合(我使用简化的ID使其更易于理解):
会议:
{
'id': '1',
'some': 'abc',
'data': 'def',
'agendaItem': [
ObjectId('2'),
ObjectId('3')
]
}
议程项目:
{
'id': ObjectId('2'),
'some': 'ghi',
'data': 'jkl'
},
{
'id': ObjectId('3'),
'some': 'mno',
'data': 'pqr'
}
我单曲的结果(!)查询应如下所示:
{
'id': ObjectId('1'),
'some': 'abc',
'data': 'def',
'agenda_items': [
{
'id': ObjectId('2'),
'some': 'ghi',
'data': 'jkl'
},
{
'id': ObjectId('3'),
'some': 'mno',
'data': 'pqr'
}
]
}
重要的是,议程项目列表应保持相同的顺序,id 2必须位于顶部。
目前,我使用带有展开、查找和组的聚合来执行这样的查询:
[
{
'$unwind': {
'preserveNullAndEmptyArrays': True,
'path': '$agendaItem'
}
},
{
'$lookup': {
'from': 'agenda_item',
'as': 'agendaItem',
'foreignField': '_id',
'localField': 'agendaItem'
}
},
{
'$unwind': {
'preserveNullAndEmptyArrays': True,
'path': '$agendaItem'
}
},
{
'$group': {
'agendaItem': {
'$addToSet': '$agendaItem'
}
}
}
]
这给了我想要的结果,但有一个例外:列表完全混淆了,这意味着在本例中,ObjectId('3')在ObjectId('2')之前。
使用MongoDb的这篇博文中的addFields:http://www.kamsky.org/stupid-tricks-with-mongodb/using-34-aggregation-to-return-documents-in-same-order-as-in-expression是某种解决方案,但我不知道如何将其放入$unwind$查找链中。你能帮助我吗?还是我的策略完全错了?
德语背景btw:https://oparl.org/spezifikation/online-ansicht/和https://mirror.oparl.org/body/5a3d010888dbe04745b24e0a/meeting
我也有同样的问题要解决。
可以在此处找到解决方案:Aggregate$lookup不返回元素原始数组顺序
我需要汇总以下记录中的所有标记: https://gist.github.com/sbassi/5642925 (这个片段中有2个样本记录)并按大小对它们进行排序(首先是出现频率更高的标记)。但是我不想考虑具有特定“user_id”的数据(比方说,2,3,6和12)。 以下是我的尝试(只是聚合,没有过滤和排序): db。用户库。聚合({$unwind:“$annotations.data.tags
我有一种情况,我需要根据一个数组值执行一个group by操作,该数组值将字段值的出现次数相加。然后对计数进行过滤,并准备结果,以便根据条件显示结果。从本质上讲,文档被转换回如果您只使用find函数就会呈现的方式。由于matchedDocuments数组中收集的项的数量,我遇到了临时文档太大的问题。任何关于如何改进这一点的建议都将是有益的。 以下是一些示例文档和基于上述标准的预期结果:
本文向大家介绍MongoDB教程之聚合(count、distinct和group),包括了MongoDB教程之聚合(count、distinct和group)的使用技巧和注意事项,需要的朋友参考一下 1. count: 2. distinct: distinct用来找出给定键的所有不同的值。使用时也必须指定集合和键。 3. group: group做的聚合有些复杂。先
我是聚合框架的新手,有以下问题。 我的收藏是这样的: 用户 ActivitiesFeed 活动 聚合函数 如何使用第一个查找结果进行查找? 我查阅了activities集合。此集合保存第二个查找BaseData.UserID的id。但是使用这种方法,第二次查找没有结果。 我对activities集合进行连接的原因是actionID可以保存来自另一个集合的用户id或文档id。它取决于activiti
多亏了这里的人的帮助,我成功地在我的文档中找到了两个ID,并在另一个集合中找到了他们的代表文档。我需要采取的下一步是进一步查找一个“嵌套”ID(引用另一个集合中的文档)。 其结果如下: 我希望chieftain部分是这样的(这就是没有添加'last'$lookup'的chieftain文档的样子):