我一直在学习MongoDB,我有点困在写一个查询。
我有以下收藏:

{
    _id : 1,
    House: A,
    inventory: [
        {
            place: Kitchen,
            item: fridge
        },
        {
            place: Kitchen,
            item: stove
        },
        {
            place: Kitchen,
            item: TV
        },
        {
            place: Bedroom,
            item: bed
        },
        {
            place: Bedroom,
            item: TV
        }
    ]
},
{
    _id : 2,
    House: B,
    inventory: [
        {
        ....
        }
    ]
},

如何编写查询以返回“places”和“items”的计数?所以输出应该是这样的:
{id:kitchen,placecount:3,itemcount:3}-3个kitchen,3个items(冰箱、炉子、电视)
{id:卧室,placecount:2,itemcount:2}-2个卧室,2个项目(床,电视)
我需要在每个地方都清点电视的数量。

最佳答案

您应该使用Aggregation Pipeline,它允许您在提供传递数组的多个步骤中聚合数据。
您的聚合应该是:

db.your_collection.aggregate([
  {$unwind: "$inventory" },
  {$group: { _id: "$inventory.place", placeCount:{$sum : 1}, items : {$push: "$inventory.item"}}},
  {$project: { placeCount: 1, itemsCount : {$size: "$items"}}}
])

解释:
$unwind为每个库存元素生成一个结果
$group按地点列出的未计划库存元素,需要计数(使用$sum)和一系列项目(仍按地点,使用$push
$project上一步分组结果的以下数据:items数组的placecount和大小(使用$size),这是itemscount

10-08 12:51
查看更多