Mongodb de v.3.4 admiteNumberDecimal
Tengo la versión del servidor MongoDB: 3.4.1 , pero cuando ejecuto el comando mongoimport shell aparece un error:
Error: error al procesar el documento n.° 7: carácter no válido 'D' en el literal NumberInt o NumberLong (se esperaba 'I' o 'L')
Mi json:
{"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":NumberDecimal("95")}La inserción normal se ejecuta bien, por lo que este es un problema mongoimort.
db.aaa.insert({"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":NumberDecimal("95")}) WriteResult({ "nInserted" : 1 })¿Porqué es eso? ¿Me puedes ayudar?
Un truco para descubrir el formato json extendido correcto es usar la utilidad mongoexport en una colección para ver cómo MongoDB publica el json.
En este caso, lo siguiente debería funcionar:
{"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":{"$numberDecimal":"95"}}
Probé esto con mongoimport con la versión de servidor 3.4.1 e importa el número decimal correctamente.
NumberDecimal("95") no es una representación JSON válida. Debería ser
{"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":95} Funciona con mongo shell porque el shell es un intérprete de javascript que trata NumberDecimal como un tipo de datos válido.
Si necesita el tipo de datos NumberDecimal , necesita usar un controlador o el shell mongo.
Forme un shell bash, puede ejecutar este sencillo script:
for i in `cat aaa.json` do mongo --quiet --eval "db.aaa.insert($i)" doneTenga en cuenta que esto es una inserción fila por fila y no es muy eficiente.