簡體   English   中英

MongoDB-分組依據-聚合-Java

[英]MongoDB - group by - aggregation - java

我的mongodb中有一個文檔如下所示-

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查詢,它為每個uuid的checkInDate最接近當前時間的用戶提供一個AppCheckInRequest doc(所有字段)。

我相信我必須使用聚合框架,但是我無法弄清楚如何獲得所需的結果。 謝謝。

在mongo shell中:-

這將為您提供整個分組:

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

並且使用$ first代替$ push只會從每個$ push中放一個(這是我想要的嗎?):

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

您可以將其翻譯成Java api嗎? 否則我也會嘗試添加。

...好的,這是一些Java:

假設我的收藏夾中的文檔為{_id:“ someid”,名稱:“ somename”,值:“ some value”},則此代碼按名稱將它們顯示為分組:

 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。 一旦此查詢生效,您便可以添加其余字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM