mongodb在aggregate中怎么统计总数

[size=medium]在aggregate只能通过$group中的$sum来进行统计,如果sales表中有下面数据:[/size]

{ "_id" : { "month" : 3, "day" : 15, "year" : 2014 }, "totalPrice" : 50, "averageQuantity" : 10, "count" : 1 }
{ "_id" : { "month" : 4, "day" : 4, "year" : 2014 }, "totalPrice" : 200, "averageQuantity" : 15, "count" : 2 }
{ "_id" : { "month" : 3, "day" : 1, "year" : 2014 }, "totalPrice" : 40, "averageQuantity" : 1.5, "count" : 2 }

[size=medium]如果要得到count总记录数该怎么做呢?
我们可以通过:[/size]

db.sales.aggregate(
[
{
$group : {
_id : null,
totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } },
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)

[size=medium]即可得到,id:null这个非常关键
得到如下结果[/size]:

{ "_id" : null, "totalPrice" : 290, "averageQuantity" : 8.6, "count" : 5 }

[size=medium]java代码可以通过如下[/size]

DBObject count = new BasicDBObject("$sum",1);
DBObject groupFileds = new BasicDBObject("_id", null);
groupFileds.put("count", count);
DBObject group = new BasicDBObject("$group", groupFileds);
AggregationOutput output = collection.aggregate(Arrays.asList(group));
List<DBObject> dbObjects = (List<DBObject>) output.results();
int count = (int) dbObjects.get(0).get("count");

[b]
这里干嘛不直接用mongodb的count,这是因为如果在这个统计中如果有根据地理空间距离查找的要求,那么就不满足要求了,所以改用aggregate进行统计是个不错的选择 [/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值