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

浏览:27日期:2023-07-06

问题描述

想要用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; }});

查不出结果,如何解决?

问题解答

回答1:

试了另一个方法,还是不行

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 有任何用处吗?

回答2:

2.4 是 2010 年发布的,那时候发布的 MongoDB server 官方都不再支持了,很有必要升级了。

回答3:

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

相关文章: