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