问题描述
|
我正在尝试使用组聚合。
我的mongodb中具有以下结构的文档:
{ \"_id\" : ObjectId(\"4ddcdc9ab4d8a3a90345508e\"),\"vehicleId\" : \"1\",\"timestamp\" : ISODate(\"2011-05-25T10:40:25.856Z\"),\"speed\" : 1 }
{ \"_id\" : ObjectId(\"4ddcdc9ab4d8a3a90345508f\"),\"vehicleId\" : \"2\",\"timestamp\" : ISODate(\"2011-05-25T10:40:26.232Z\"),\"speed\" : 2 }
在测试中,我想获取每个VehicleId的最新速度,即
执行以下操作:
val key = MongoDBObject(\"vehicleId\" -> true)
val cond = MongoDBObject.empty
val initial = MongoDBObject(\"timestamp\" -> 0)
val reduce =
\"\"\"function(doc,prev) {
if (doc.timestamp > prev.timestamp) {
prev.speed = doc.speed;
prev.timestamp = doc.timestamp;
}
}\"\"\"
val groupedSpeed = collection.group(key,cond,initial,reduce)
for (dbObject: DBObject <- groupedSpeed) {
println(dbObject.toString)
奇怪的是,在集合groupedSpeed中,该字段
速度不再是一个整数:
{ \"vehicleId\" : \"2\",\"timestamp\" : { \"$date\" : \"2011-05-25T10:40:49Z\"},\"speed\" : 2.0}
{ \"vehicleId\" : \"1\",\"speed\" : 1.0}
我错过了什么?我正在使用casbah 2.1.2。
干杯,
基督教
[更新]在javascript和bson中看起来很正常,请参见此处:casbah邮件列表
解决方法
Javascript将所有数值表示为双精度。
您可能需要扩展应用程序逻辑,以便每当插入新文档时,在单独的集合中还可以更新该车辆的最大速度,因此您不必进行组查询。