我一直在学习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: [
{
....
}
]
},
如何编写查询以返回“地点”和“项目”的计数?所以输出应该是这样的:
{id:Kitchen,PlaceCount:3,itemCount:3} - 3个厨房,3件(冰箱,炉灶,电视)
{id:Bedroom,PlaceCount:2,itemCount:2} - 2卧室,2件(床,电视)
我需要在每个地方计算电视数量。
答案 0 :(得分:1)
您应该使用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"}}}
])
说明: