2

Я пытаюсь вставить дату в MongoDB используя следующий путь:Как сохранить дату в MongoDB в формате ISO вместо Long [Play, Scala и ReactiveMongo]?

collection.insert(Json.obj("user"->"abc", "joined_date" -> DateTime.now)) 

В базе данных:

{              
      "_id" : ObjectId("5865d99718969bca6a09450f"), 
      "user" : "abc",         
      "joined_date" : NumberLong("1483069847066")  
    } 

Проблема здесь в том, что дата хранится в базе данных в Лонг-леек формате, но то, что я хочу это хранить в формате ISO Date.

Я попытался в MongoShell сохраняющиеся те же данные db.example.insert({user:"abc", joined_date:new Date()}) и результат ниже:

{ 
     "_id" : ObjectId("5865d838a4f98c5bb83b1eb8"), 
     "user" : "abc", 
     "joined_date" : ISODate("2016-12-30T03:44:56.824Z") 
} 

Итак, как я могу хранить дату в формате ISODate в базе данных с использованием ReactiveMongo?

ответ

2

Вы используете Play JSON для представления документа MongoDB (а не BSON), а дата - это Joda, преобразованная как JSON-номер в соответствии с модулем Play JSON.

Вы можете напрямую использовать BSON с водителем и передать дату как BSONDateTime.

BSONDocument("myDate" -> BSONDateTime(..)) 

Или (при условии ReactiveMongo версии> = 0.11.9), вы можете использовать MongoDB JSON extended representation$date: date_value:

Json.obj("myDate" -> Json.obj("$date" -> dateTimeLong)) 

Форматы JSON, поддерживаемые сериализации ReactiveMongo являются documented.

+0

спасибо. Это решило мою проблему. –