【发布时间】:2023-03-05 21:42:01
【问题描述】:
我正在尝试使用聚合框架将嵌套数组与嵌套数组相加,并按排序顺序返回原始文档。
这就是我的文档的样子:
myColl: {
_id: 123,
fruits: [{
name: apple,
buyers: [{buyer1}, {buyer2}]
},
{
name: banana,
buyers: [{buyer1}, {buyer2}, {buyer3}]
]
}
如您所见,fruits 是 myColl 文档中的子文档数组,buyers 是 fruits 中的另一个子文档数组。
我想要的是计算文档中所有水果的买家数组。所以上述文件的买家总数应该是“5”。
然后我想按买家总数对 myColl 中的所有文档进行排序。我尝试了一些事情,但似乎无法正确:
db.myColl.aggregate([
{$unwind: '$fruits'},
{$unwind: '$fruits.buyers'},
{$group: {
_id: '$fruits.buyers',
totalBuyers: {$sum: '1'},
docs: {$push: '$$ROOT'}
}},
{$sort: {'totalBuyers': 1}}])
没有给我想要的结果,totalBuyers 始终为 0。此外,它返回的结果比 myColl 的总数还要多。我猜这与“_id”字段有关。
我查看了其他一些 SO 问题,但找不到与我的案例匹配或有效的内容。
我最后的手段是自己计算或创建一个新字段来做,但如果我可以运行查询,这将使我的生活变得更轻松。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework