84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
需求:对表数据进行分组后,根据某个字段去重,然后在count
命令行有 db.collection.distinct("someField")
db.collection.distinct("someField")
问:用morphia应该怎么写?或者通过原生的mongodb驱动应该怎么做?
如果用聚合的话,怎么才能当查询的结果为null时统计的数量为0,比如sql中的 isNull(count(1), 0)
isNull(count(1), 0)
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
BasicDBObject group1 = new BasicDBObject(); BasicDBObject _id = new BasicDBObject(); _id.put("field1", "$field1"); _id.put("field2", "$field2"); group1.put("_id", _id); BasicDBObject group2 = new BasicDBObject(); group2.put("_id", "$_id.field1"); group2.put("statCnt", new BasicDBObject("$sum", 1)); List<DBObject> aggParam = new ArrayList<>(); aggParam.add(new BasicDBObject("$match", match)); aggParam.add(new BasicDBObject("$group", group1)); aggParam.add(new BasicDBObject("$group", group2)); aggParam.add(new BasicDBObject("$sort", sort)); aggParam.add(new BasicDBObject("$limit", 10)); AggregationOutput output = collection.aggregate(aggParam);
這是我實際用到的程式碼,簡單的說就是用了兩次group,達到分組都對某個欄位去重的目的
參考:http://www.cnblogs.com/lori/p/4597341.html
呼叫com.mongodb.DBCollection#distinct方法,對應問題中的命令列 db.collection.distinct("someField")。 這樣會把所有的資料都回傳,所以如果只是為了得到count,沒必要用distinct。 可以直接用aggregate。
com.mongodb.DBCollection#distinct
db.collection.aggregate( [{ $group:{ _id:"$someField", count:{$sum:1} } }] )
這是我實際用到的程式碼,簡單的說就是用了兩次group,達到分組都對某個欄位去重的目的
參考:http://www.cnblogs.com/lori/p/4597341.html
呼叫
com.mongodb.DBCollection#distinct
方法,對應問題中的命令列db.collection.distinct("someField")
。這樣會把所有的資料都回傳,所以如果只是為了得到count,沒必要用distinct。
可以直接用aggregate。