搜尋

首頁  >  問答  >  主體

group-by - MongoDB對聚合查詢結果進行篩選

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

查不出結果,如何解決?

漂亮男人漂亮男人2761 天前642

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-25 09:06:30

    試了另一個方法,還是不行

    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 有任何用處嗎?

    回覆
    0
  • 高洛峰

    高洛峰2017-04-25 09:06:30

    2.4 是 2010 年發布的,那時發布的 MongoDB server 官方都不再支援了,很有必要升級了。

    回覆
    0
  • 滿天的星座

    滿天的星座2017-04-25 09:06:30

    聚合的話推薦3.2以上版本。建議使用https://github.com/T-baby/Mon... 來操作和管理mongodb,可參考https://t-baby.gitbooks.io/mo... 。十分鐘上手

    回覆
    0
  • 取消回覆