我试图使用聚合框架将嵌套数组与嵌套数组相加,并以排序顺序返回原始文档 .
所以这是我的文档的样子:
myColl: {
_id: 123,
fruits: [{
name: apple,
buyers: [{buyer1}, {buyer2}]
},
{
name: banana,
buyers: [{buyer1}, {buyer2}, {buyer3}]
]
}
因为你可以在myColl文档中包含子文档,并且买家是水果中的一系列子文档 .
我想要的是计算所有水果的文档中的买家数组 . 因此,上述文件的买家总数应为'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问题,但在我的案例中找不到匹配或有用的东西 .
我最后的选择是自己计算或创建一个新的领域,但如果我可以只运行一个查询,它将使我的生活更轻松 .
1 回答
是的,在经过大量的修修补补后,我遇到了两个问题:
1)我的号码附近有引号,愚蠢的错误 . 2)我需要通过$$ ROOT._id明确分组
所以这是有效的解决方案:
请注意,我必须使用'$ first'而不是'$ push',以便它只检索第一个文档,因为文档会重复,否则为每个买家重复 .