今天碰到需要统计热门标签,也就是标签名访问次数,用sql很简单
select lable_id,count(*) as count from table where state>-1 group label
但是mongodb显然没那么轻松,故在网络上收集资料,本地测试,最终解决了问题
代码如下:
<span style="font-size:14px;"><span style="white-space:pre"> </span> DBCollection myColl = db.getCollection("toskebre");
// group 字段
DBObject groupFields = new BasicDBObject( "_id", "$label_id");
groupFields.put("count", new BasicDBObject( "$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields );
// 倒序排列
DBObject sortFields = new BasicDBObject("count", -1);
DBObject sort2 = new BasicDBObject("$sort", sortFields );
//去前10条记录
DBObject limitFields = new BasicDBObject("$limit", 10);
//state>0
DBObject filterFields = new BasicDBObject("$gt", -1);
DBObject filter2 = new BasicDBObject("state", filterFields);
DBObject filter = new BasicDBObject("$match", filter2);
// 获取数据
AggregationOutput output = myColl .aggregate(filter,group, sort2,limitFields);
Iterable<DBObject> outputResults = output.results();</span>
DBObject的value参数必须是DBObject
结果:
[{ "_id" : { "$oid" : "5668e49da8e24d0170be62f5"} , "count" : 10}, { "_id" : { "$oid" : "5668e410a8e24d0170be62f3"} , "count" : 2}]
希望对大家有点帮助,错误之处还请指出
主要参考:http://blog.csdn.net/miyatang/article/details/20997313
这个地址也有其他详细的sql聚合对应操作和例子