java mongo 去重_java - mongodb框架morphia中怎么去重?

Introduction(简介)                    Query接口是个相当直接的方法。他允许非常确切的过滤方式(基于属性),排序,一个偏移和限制返回结果的数量。

需求:对表数据进行分组后,根据某个字段去重,然后在count 命令行有 db.collection.distinct("someField") 问:用morphia应该怎么写?或者通过原生的mongodb驱动应该怎么做? 如果用聚合的话,怎么才能当查询的结果为null时统计的数量为0,比如sql中的 isNull(count(1), 0), 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",@Indexed

此注解是为某个字段申请一个索引。 当datastore.ensureIndexes() 方法被调用时 这些索引就会被申请.. 更多如下:

把@Indexed注解在你想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}

}

}])

这两天在整理mongodb开发的文章, 从网上搜集的资料整合了一个web版的框架出来. 代码就不贴了, 地址在 https://github.com/zdsiyan/watermelon 需要的自行下载,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值