1

我一直在尝试使用 reactivemongo 将一些文档插入到具有一些 BSON 类型的 mongodb 集合中。

我正在使用 Play JSON 库来解析和操作扩展 JSON中的一些文档,这是一个示例:

{
    "_id" : {"$oid": "5f3403dc7e562db8e0aced6b"},
    "some_datetime" : {
        "$date" : {"$date": 1597841586927}
    }
}

我正在使用reactivemongo-play-json,因此我必须导入以下内容,以便在将其传递给时JsObject自动将其转换为 reactivemongoBSONDocumentcollection.insert.one

import reactivemongo.play.json.compat._
import json2bson._

不幸的是,一旦我打开我的 mongo shell 并查看我刚刚插入的文档,结果如下:

{
    "_id" : ObjectId("5f3403dc7e562db8e0aced6b"),
    "some_datetime" : {
        "$date" : NumberLong("1597244282116")
    },
}

只有_id被理解为使用扩展 JSON 描述的 BSON 类型,并且我希望该some_datetime字段类似于 a ISODate(),就像我希望看到UUID()-type 值而不是它们的扩展 JSON 描述一样,如下所示:

{'$binary': 'oKQrIfWuTI6JpPbPlYGYEQ==', '$type': '04'}

如何确保此扩展 JSON 实际转换为正确的 BSON 类型?

4

1 回答 1

0

原来问题是我认为扩展的 JSON 实际上不是;我的日期时间应格式化为:

{"$date": {"$numberLong": "1597841586927"}}

代替

{"$date": 1597841586927}

我的数据源引入了错误的格式 - 默认情况下,kafka 连接 mongo 源连接器未将文档序列化为正确的扩展 JSON(请参阅此 stackoverflow 帖子)。

于 2020-09-29T15:31:31.953 回答