operaciones importar example data commands json mongodb shell bson

importar - Fuerza a mongodb a dar salida a JSON estricto



mongodb shell commands (3)

El shell MongoDB habla Javascript, por lo que la respuesta es simple: use JSON.stringify() . Si su comando es db.serverStatus() , simplemente puede hacer esto:

JSON.stringify(db.serverStatus())

Esto no generará la representación correcta de "modo estricto" de cada uno de los campos ( { "floatApprox": <number> } lugar de { "$numberLong": "<number>" } ), pero si lo que importa es Al salir de JSON conforme a los estándares, esto funcionará.

Quiero consumir la salida en bruto de algunos comandos de MongoDB en otros programas que hablan JSON. Cuando ejecuto comandos en el shell mongo, representan JSON extendido , campos en "modo shell", con campos especiales como NumberLong , Date y Timestamp . Veo referencias en la documentación al "modo estricto", pero no veo ninguna forma de activarlo para el shell, o una forma de ejecutar comandos como db.serverStatus() en cosas que mongodump JSON estricto, como mongodump . ¿Cómo puedo forzar a Mongo para que genere JSON conforme a los estándares?

Hay several other questions sobre este tema, pero no encuentro ninguna de sus respuestas particularmente satisfactoria.


No he encontrado una forma de hacer esto en el shell mongo, pero como solución alternativa, mongoexport puede ejecutar consultas y su salida utiliza un modo estricto y puede canalizarse a otros comandos que esperan una entrada JSON (como json_pp o jq ). Por ejemplo, supongamos que tiene el siguiente comando de shell mongo para ejecutar una consulta y desea crear una canalización utilizando esos datos:

db.myItemsCollection.find({creationDate: {$gte: ISODate("2016-09-29")}}).pretty()

Convierta ese comando de shell mongo en este comando de shell, canalizando por ejemplo a `json_pp:

mongoexport --jsonArray -d myDbName -c myItemsCollection -q ''{"creationDate": {"$gte": {"$date": "2016-09-29T00:00Z"}}}'' | json_pp

Deberá convertir la consulta a un formato de modo estricto, y pasar el nombre de la base de datos y el nombre de la colección como argumentos, así como la cotización adecuada para su shell, como se muestra aquí.


Para continuar con la respuesta de @jbyler, puede eliminar el número de Long usando sed después de obtener sus datos, es decir, si está usando linux.

mongoexport --jsonArray -d dbName -c collection -q ''{fieldName: {$regex: ".*turkey.*"}}'' | sed -r ''s//{ "[$]numberLong" : "([0-9]+)" }/"/1"/g'' | json_pp