Тип данных изменяется с 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 }

В тесте я хочу получить последнюю скорость для каждого транспортного средства, т.е. я делаю следующее:

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 ​​скорость поля больше не является 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}

Я что-то пропустил? Я использую касбу 2.1.2.

Привет, Кристиан

[ОБНОВЛЕНИЕ] Похоже, это нормально для javascript и bson, см. здесь: список рассылки casbah


person Christian    schedule 25.05.2011    source источник


Ответы (1)


Javascript представляет все числовые значения как двойные.

Возможно, вы захотите расширить логику своего приложения, чтобы всякий раз, когда вставляется новый документ, в отдельной коллекции вы также обновляли максимальную скорость для этого транспортного средства, чтобы вам никогда не приходилось выполнять групповые запросы.

person Karoly Horvath    schedule 14.06.2011