我正在尝试以java.time.Instant
mongo 的本机Date
格式存储。
官方 ReactiveMongo 文档指出日期时间应序列化为
JsObject with a $date JsNumber field with the timestamp (milliseconds) as value
(http://reactivemongo.org/releases/1.0/documentation/json/overview.html)
我遵循此规则,但该值不存储为 mongo's Date
,而是存储为常规 JSON (BSON) 文档:
{
"_id" : ObjectId("6057b962af0000af00e81ec7"),
"username" : "john",
"createdAt" : {
"$date" : NumberLong(1616361826198)
}
}
存储文档的 Scala 源代码:
import play.api.libs.json.Json
import reactivemongo.api.DB
import reactivemongo.api.bson.BSONObjectID
import reactivemongo.api.bson.collection.BSONCollection
import java.time.Instant
import scala.concurrent.{ ExecutionContext, Future }
import reactivemongo.play.json.compat._
import json2bson._
import reactivemongo.api.commands.WriteResult
class Repo(database: DB)(implicit ec: ExecutionContext) {
def collection: BSONCollection =
database.collection("users")
def insertDocument(): Future[WriteResult] = {
val doc = Json.obj(
"_id" -> BSONObjectID.generate(),
"username" -> "john",
"createdAt" -> Json.obj("$date" -> Instant.now().toEpochMilli)
)
collection.insert.one(doc)
}
}
这里有什么问题?
PS:
如果我更改扩展 BSON 语法
Json.obj("$date" -> Instant.now().toEpochMilli)
至 BSONDateTime
:
...
"createdAt" -> BSONDateTime(Instant.now().toEpochMilli)
...
有用。
但是,为什么它不能与 play JSON + 扩展语法一起使用?