2013-10-05 39 views
0

我在MongoDB的一份文件看起來像這樣 -的MongoDB - 聚合 - - 按組的java

public class AppCheckInRequest { 
    private String _id; 
    private String uuid; 
    private Date checkInDate; 
    private Double lat; 
    private Double lon; 
    private Double altitude; 
} 
  • 該數據庫將包含具有相同UUID的多個文件,但不同的checkInDates

問題

我想用java運行一個mongo查詢,它給了我一個AppCheckInReque每個uuid的checkInDate最接近當前時間的st doc(所有字段)。

我相信我不得不聚合框架,但我無法弄清楚如何得到我需要的結果。謝謝。

回答

2

在蒙戈外殼: -

這會給你整個分組:

db.items.aggregate({$group : {_id : "$uuid" , value : { $push : "$somevalue"}}}) 

而且使用$第一,而不是$推只能將分別來自(這是你想要什麼,我想想嗎?):

db.items.aggregate({$group : {_id : "$uuid" , value : { $first : "$somevalue"}}}) 

你能把這個翻譯成Java api嗎?或者我會嘗試添加。

...好吧,這裏的一些Java:

假設我的集合中的文檔被{_id: 「someid」,名稱: 「somename」,值: 「一些價值」} 那麼這個代碼顯示了他們按名稱分組:

Mongo client = new Mongo("127.0.0.1"); 

    DBCollection col = client.getDB("ajs").getCollection("items"); 

    AggregationOutput agout = col.aggregate(
      new BasicDBObject("$group", 
        new BasicDBObject("_id", "$name").append("value", new BasicDBObject("$push", "$value")))); 

    Iterator<DBObject> results = agout.results().iterator(); 


    while(results.hasNext()) { 
    DBObject obj = results.next(); 

    System.out.println(obj.get("_id")+" "+obj.get("value")); 

    } 

如果您將$ push更改爲$ first,則每組只能獲得1個。您可以在查詢工作後添加剩餘的字段。

+0

任何與Java對話的幫助將不勝感激。 – bickster

+0

@bickster你的願望是我的命令。我剛剛完成了mongouniversity m101j課程,所以我需要練習讓它陷入困境:) – Aaron