gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:40:24 27 4
gpt4 key购买 nike

我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com