我一直在学习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