如何以 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.
我正在尝试使用以下方式在 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.