我可以在聚合框架中获取只有最新日期的字段的不同值吗?
Can I get distinct values of a field with only the latest date in the Aggregation framework?
我有一个充满出租车数据的集合,看起来像这样(简化):
{
"TaxiLicense" : "TET123",
"GetOff" : "2015-01-10,00:02:11",
"GetOffLongitude" : 121.41
}
因为有了这个实时数据,出租车不断地向集合发送新的文档,以及新的下车时间和 GPS 坐标。我只想要最近下车时间每个不同出租车牌照的 GPS 坐标。
聚合框架是否有办法在 Java 中执行此操作,或者我是否需要聚合所有条目然后让我的 Java 程序找到每辆独特出租车的最晚时间?
我目前正在使用
DBObject taxigroup = new BasicDBObject("$group",
new BasicDBObject("_id",
new BasicDBObject("License","$TaxiLicense")
.append("getoff","$GetOff").append("longitude","GetOffLongitude"))
);
AggregationOutput aggout = taxistationOfCollection.aggregate( Arrays.asList(taxigroup));
您基本上是在寻找 $last
operator. This is commonly used with $sort
,它 returns 在分组边界找到 "last" 文档属性。
基本管道:
[
{ "$sort": { "TaxiLicence": 1, "GetOff": 1 } },
{ "$group": {
"_id": "$TaxiLicence",
"GetOff": { "$last": "$GetOff" },
"GetOffLongitude": { "$last": "$GetOffLongitude" }
}}
]
或者专门用 Java 驱动程序构建:
DBObject sort = new BasicDBObject("$sort",
new BasicDBObject("TaxiLicence", 1)
.append("GetOff",1)
);
DBObject group = new BasicDBObject("$group",
new BasicDBObject("_id", "$TaxiLicence"
.append("GetOff", new BasicDBObject( "$first", "$GetOff" ) )
.append("GeOffLongitude", new BasicDBObject( "$first", "$GeOffLongitude" ))
);
AggregationOutput aggout = taxistationOfCollection.aggregate(sort,group);
我有一个充满出租车数据的集合,看起来像这样(简化):
{
"TaxiLicense" : "TET123",
"GetOff" : "2015-01-10,00:02:11",
"GetOffLongitude" : 121.41
}
因为有了这个实时数据,出租车不断地向集合发送新的文档,以及新的下车时间和 GPS 坐标。我只想要最近下车时间每个不同出租车牌照的 GPS 坐标。
聚合框架是否有办法在 Java 中执行此操作,或者我是否需要聚合所有条目然后让我的 Java 程序找到每辆独特出租车的最晚时间?
我目前正在使用
DBObject taxigroup = new BasicDBObject("$group",
new BasicDBObject("_id",
new BasicDBObject("License","$TaxiLicense")
.append("getoff","$GetOff").append("longitude","GetOffLongitude"))
);
AggregationOutput aggout = taxistationOfCollection.aggregate( Arrays.asList(taxigroup));
您基本上是在寻找 $last
operator. This is commonly used with $sort
,它 returns 在分组边界找到 "last" 文档属性。
基本管道:
[
{ "$sort": { "TaxiLicence": 1, "GetOff": 1 } },
{ "$group": {
"_id": "$TaxiLicence",
"GetOff": { "$last": "$GetOff" },
"GetOffLongitude": { "$last": "$GetOffLongitude" }
}}
]
或者专门用 Java 驱动程序构建:
DBObject sort = new BasicDBObject("$sort",
new BasicDBObject("TaxiLicence", 1)
.append("GetOff",1)
);
DBObject group = new BasicDBObject("$group",
new BasicDBObject("_id", "$TaxiLicence"
.append("GetOff", new BasicDBObject( "$first", "$GetOff" ) )
.append("GeOffLongitude", new BasicDBObject( "$first", "$GeOffLongitude" ))
);
AggregationOutput aggout = taxistationOfCollection.aggregate(sort,group);