使用组聚合时,数据类型从Int变为Float

问题描述

| 我正在尝试使用组聚合。 我的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将所有数值表示为双精度。 您可能需要扩展应用程序逻辑,以便每当插入新文档时,在单独的集合中还可以更新该车辆的最大速度,因此您不必进行组查询。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...