group-by - MongoDB对对聚合查询结果进行筛选

 小茹可爱的家1982 发布于 2022-10-25 17:23

想要用java做分组查询,貌似2.4版的java驱动包不支持db.collection.aggregate语法,所以被迫改用db.collection.group()方法。
需求:要用Mongo实现该与SQL的相同作用:
select number from user group by number having count(*) = 1

使用aggregate可以这么实现:

db.user.aggregate(
 {$group:{_id:"$number",total:{$sum:1}}},
 {$match:{total:1}}
);

现在改用group方法:

db.user.group({
  key : {number:1}, 
  cond : {count:1}, 
  initial : {count: 0}, 
  reduce : function Reduce(doc, out) {
   out.count +=1;
  }, 
  finalize : function Finalize(out) {
   return out;
  }
});

查不出结果,如何解决?

3 个回答
  • 聚合的话推荐3.2以上版本。推荐使用https://github.com/T-baby/Mon... 来操作和管理mongodb,可参考https://t-baby.gitbooks.io/mo... 。十分钟上手

    2022-10-26 23:27 回答
  • 2.4 是 2010 年发布的,那时候发布的 MongoDB server 官方都不再支持了,很有必要升级了。

    2022-10-26 23:28 回答
  • 试了另一个方法,还是不行

    db.user.group({
      key : {number:1}, 
      cond : {}, 
      initial : {count: 0}, 
      reduce : function Reduce(doc, out) {
       out.count +=1;
      }, 
      finalize : function Finalize(out) {
       if(out.count==1){
            return out;
        }
      }
    });
    

    话说finalize 里面的return 有任何用处吗?

    2022-10-26 23:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有