我试图在mongodb中执行相当于以下查询:
按用户从销售组中选择计数(*),计数(类别),总和(价格)
以下是我的集合中的文档:
{
"_id" : ObjectId("54da8b0aa7c80aed4a9f9f33"),
"userincome" : "$100,000 - $200,000",
"county" : "Los Angeles",
"userstate" : "California",
"usercity" : "Los Angeles",
"price" : 100,
"category" : "Swimwear",
"usergender" : "Male"
}
这是我的聚合返回count(*)和sum(price),但我不知道如何添加count(类别) .
db['stream.sales'].aggregate([
{
$group:{
_id:"$usergender",
price:{
$sum:"$price"
},
_count:{
$sum:1
}
}
}
])
我知道我可以运行一个单独的聚合来获取计数(类别),但我想在聚合中进行,因为我不希望我的所有结果都被过滤,其中类别存在= true .
db['stream.sales'].aggregate([
{
$match:{
'category':{
"$exists":true
}
}
},
{
$group:{
_id:"$usergender",
count:{
$sum:1
}
}
}
]);
Edit:
能够在wdberkleys响应的帮助下找到解决方案:
db['stream.sales'].aggregate([
{ "$group" : {
"_id" : "$usergender",
"count" : { "$sum" : 1 },
"price" : { "$sum" : "$price" },
"category" : { "$push" : "$category" }
} },
{ "$project" : {
"count" : 1,
"size" : 1,
"categories" : { "$size" : "$category" }
} }
])
1 回答
在
$group
期间将类别推送到集合,然后$project
生成类别集合的大小: