Тип данных изменяется с Int на Float при использовании групповой агрегации - PullRequest
2 голосов
/ 25 мая 2011

Я пытаюсь использовать групповую агрегацию.

У меня в 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}

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

Cheers, Кристиан

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

1 Ответ

0 голосов
/ 14 июня 2011

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

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

...