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

Ra *_* Ka 4 scala mongodb playframework reactivemongo play-reactivemongo

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

collection.insert(Json.obj("user"->"abc", "joined_date" -> DateTime.now))
Run Code Online (Sandbox Code Playgroud)

在数据库中:

   {                                                       
            "_id" : ObjectId("5865d99718969bca6a09450f"),   
            "user" : "abc",                                 
            "joined_date" : NumberLong("1483069847066")     
    }  
Run Code Online (Sandbox Code Playgroud)

这里的问题是日期以长毫秒格式存储在数据库中,但我想要的是它以 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")
}
Run Code Online (Sandbox Code Playgroud)

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

cch*_*tep 5

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

您可以直接将 BSON 与驱动程序一起使用,并将日期作为BSONDateTime.

BSONDocument("myDate" -> BSONDateTime(..))
Run Code Online (Sandbox Code Playgroud)

或者(假设 ReactiveMongo 版本 >= 0.11.9)您可以使用MongoDB JSON 扩展表示 $date: date_value

Json.obj("myDate" -> Json.obj("$date" -> dateTimeLong))
Run Code Online (Sandbox Code Playgroud)

记录了 ReactiveMongo 序列化支持的 JSON 格式。