84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
需求:对表数据进行分组后,根据某个字段去重,然后在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。