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