如何以 ISO 格式而不是 Long [Play、Scala 和 ReactiveMongo] 格式将日期存储在 MongoDB 中?

How to store date in MongoDB in ISO format instead of Long [Play, Scala and ReactiveMongo]?

我正在尝试使用以下方式在 MongoDB 中插入日期:

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

在数据库中:

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

这里的问题是日期以 Long 毫秒格式存储在数据库中,但我想要它以 ISO 日期格式存储。

我尝试在 MongoShell 中保存相同的数据 db.example.insert({user:"abc", joined_date:new Date()}) 结果如下:

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

那么,如何使用 ReactiveMongo 在数据库中以 ISODate 格式存储日期?

您正在使用 Play JSON 来表示 MongoDB 文档(不是 BSON),日期是根据 Play JSON 转换为 JSON 数字的 Joda 日期模块。

你可以直接在驱动中使用BSON,并将日期作为BSONDateTime传递。

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

或者(假设 ReactiveMongo 版本 >= 0.11.9)你可以使用 MongoDB JSON extended representation $date: date_value :

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

ReactiveMongo 序列化支持的 JSON 格式为 documented.