MongoDB获取文档数组中嵌套数组的总计数
我试图使用聚合框架将嵌套数组与嵌套数组相加,并按排序顺序返回原始文档 下面是我的医生的样子:MongoDB获取文档数组中嵌套数组的总计数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我试图使用聚合框架将嵌套数组与嵌套数组相加,并按排序顺序返回原始文档 下面是我的医生的样子: myColl: { _id: 123, fruits: [{ name: apple, buyers: [{buyer1}, {buyer2}] }, { name: banana, buyers: [{buyer1}, {buyer2}, {buyer3}] ] } 正如您所能看到的,在myColl文档中,水果是子文档的数组,而买家是水果中的另一个子文档数组 我
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}}])
没有提供所需的结果,并且TotalBullers始终为0。加上它返回的结果比myColl的总数还要多。我猜这与'u id'字段有关
我看了一些其他的SO问题,但找不到与我的情况相符或有效的东西
我最后的办法是自己计算,或者创建一个新的字段来计算,但如果我可以只运行一个查询,那么我的生活会轻松得多。对,经过大量的修补和混乱,我有两个问题: 我的号码周围有引号,这是个愚蠢的错误。 2我需要通过$$ROOT 因此,以下是有效的解决方案:
db.myColl.aggregrate(
[
{$unwind: '$fruits'},
{$unwind: '$fruits.buyers'},
{$group: {
_id: '$$ROOT._id',
doc: {$first: '$$ROOT'},
totalBuyers: {$sum: 1}
}},
{$sort: {'totalBuyers': -1}},
{$limit : 10 }
]
)
请注意,我必须使用“$first”而不是“$push”,这样它只能在每个买家重复文档时检索第一个文档