¿ReactiveMongo maneja completamente la conversión extendida de JSON a BSON?

Sep 29 2020

He estado intentando usar reactivemongo para insertar algunos documentos en una colección de mongodb con algunos tipos BSON.

Estoy usando la biblioteca Play JSON para analizar y manipular algunos documentos en JSON extendido , aquí hay un ejemplo:

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

Estoy usando reactivemongo-play-json, por lo que tengo que importar lo siguiente para que mi JsObjectse BSONDocumenttransmita automáticamente a un reactivo mongo al pasarlo acollection.insert.one

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

Desafortunadamente, una vez que abro mi shell mongo y miro el documento que acabo de insertar, este es el resultado:

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

Solo _idse ha entendido como un tipo BSON descrito usando JSON extendido, y esperaría que el some_datetimecampo sea algo así como ISODate(), lo mismo que esperaría ver UUID()valores de tipo en lugar de su descripción JSON extendida que se ve así:

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

¿Cómo puedo asegurarme de que este JSON extendido se convierta realmente en los tipos BSON adecuados?

Respuestas

FlorentinHennecker Sep 29 2020 at 22:31

Resulta que el problema es que lo que pensé que era JSON extendido en realidad no lo es; mi fecha y hora debe tener el formato:

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

en vez de

{"$date": 1597841586927}

Mi fuente de datos introdujo el formato incorrecto: un conector de fuente mongo de kafka connect que no serializa documentos al JSON extendido adecuado de forma predeterminada (consulte esta publicación de stackoverflow ).