¿ReactiveMongo maneja completamente la conversión extendida de JSON a BSON?
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
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 ).