2011-05-25 84 views
2

我正在尝试使用组聚合。使用组聚合时,数据类型从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) 

奇怪的是,在收集分组速度,字段 速度不是一个Int:

{ "vehicleId" : "2" , "timestamp" : { "$date" : "2011-05-25T10:40:49Z"} , "speed" : 2.0} 
{ "vehicleId" : "1" , "timestamp" : { "$date" : "2011-05-25T10:40:49Z"} , "speed" : 1.0} 

我错过了什么吗?我正在使用casbah 2.1.2。

干杯, 基督教

[更新]看起来这是在JavaScript和BSON正常的,在这里看到:casbah mailing list

回答

0

的Javascript代表所有数值为双打。

您可能想要扩展您的应用程序逻辑,以便每当插入新文档时,您都可以在单独的集合中更新该车辆的最高速度,因此您无需进行组查询。

相关问题