MongoDB-groupby-aggregation-java

MongoDB-groupby-aggregation-java,java,mongodb,Java,Mongodb,我的mongodb中有一个这样的文件- public class AppCheckInRequest { private String _id; private String uuid; private Date checkInDate; private Double lat; private Double lon; private Double altitude; } 数据库将包含多个uuid相同但签入日期不同的文档 问题 我想使用java

我的mongodb中有一个这样的文件-

public class AppCheckInRequest {
    private String _id;
    private String uuid;
    private Date checkInDate;
    private Double lat;
    private Double lon;
    private Double altitude;
}
  • 数据库将包含多个uuid相同但签入日期不同的文档
问题

我想使用java运行一个mongo查询,该查询为每个uuid提供一个AppCheckInRequest文档(所有字段),每个uuid的checkInDate最接近当前时间

我相信我必须使用聚合框架,但我不知道如何获得所需的结果。谢谢。

在mongo shell中:-

这将为您提供整个分组:

db.items.aggregate({$group : {_id : "$uuid" , value : { $push : "$somevalue"}}} )
使用$first而不是$push只会从每个应用程序中放入一个(我想这是您想要的):

你能把它翻译成JavaAPI吗?或者我也会试着补充一下

。。。好的,下面是一些Java:

假设我的集合中的文档是{u id:“someid”,name:“somename”,value:“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"));

  }
Mongo客户端=新的Mongo(“127.0.0.1”);
DBCollection col=client.getDB(“ajs”).getCollection(“items”);
AggregationOutput agout=列聚合(
新的BasicDBObject($group),
新的BasicDBObject(“\u id”,“$name”)。追加(“value”,新的BasicDBObject(“$push”,“$value”));
迭代器结果=agout.results().Iterator();
while(results.hasNext()){
DBObject obj=results.next();
System.out.println(obj.get(“_id”)+”+obj.get(“value”);
}

如果您将$push更改为$first,则每组只能获得1。一旦查询成功,您就可以添加其余字段。

如果您对Java对话有任何帮助,我们将不胜感激。@bickster您的愿望就是我的命令。我刚刚完成了蒙哥纳大学m101j课程,所以我需要练习,让它牢牢地印在我的脑海中:)
 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"));

  }