java - MongoDB - 分组依据 - 聚合 - java

标签 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 但不同 checkInDates 的文档

问题

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

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

最佳答案

在 mongo shell 中:-

这将为您提供整个分组:

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

使用 $first 而不是 $push 只会从每个中放入一个(我想这就是你想要的?):

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

你能把它翻译成Java api吗?或者我也会尝试添加它。

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

假设我的集合中的文档是 {_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"));

  }

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

关于java - MongoDB - 分组依据 - 聚合 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202703/

相关文章:

java - iso 日期未成功转换为 12 小时格式的时间

c# - 无效操作异常 : Record reader index out of sync

java - java中如何将一个数转换成2的补数

mongodb - 在Mongodb中查询公里半径的位置?

javascript - 设置查询以查看对象数组的特定索引

MongoDB 按多个字段聚合组

mongodb - 我可以在 MongoDB 中存储关系数据库结构吗

java - 验证 Null 和 0

java - "Column count doesn' t匹配值计数在第1行”程序错误

java - 验证用户输入的日期