java - mongodb框架morphia中怎么去重?
高洛峰
高洛峰 2017-04-17 15:15:00
0
2
741

需求:对表数据进行分组后,根据某个字段去重,然后在count

命令行有db.collection.distinct("someField")

问:用morphia应该怎么写?或者通过原生的mongodb驱动应该怎么做?

如果用聚合的话,怎么才能当查询的结果为null时统计的数量为0,比如sql中的isNull(count(1), 0)

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답 (2)
阿神
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 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。

    db.collection.aggregate( [{ $group:{ _id:"$someField", count:{$sum:1} } }] )
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!