tutorial - Importar json desde un archivo a mongodb usando mongoimport
mongodb university (3)
Tengo mi json_file.json así:
[
{
"project": "project_1",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
},
{
"project": "project_2",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
},
{
"project": "project_3",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
}
]
Cuando ejecuto el siguiente comando para importar esto a mongodb:
mongoimport --db my_db --collection my_collection --file json_file.json
Obtuve el siguiente error:
Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
Si agrego el indicador --jsonArray al comando que importo así:
imported 3 documents
en lugar de un documento con el formato json como se muestra en el archivo original.
¿Cómo puedo importar json en mongodb con el formato original en el archivo que se muestra arriba?
Hoy enfrenté un problema opuesto, mi conclusión sería:
Si desea insertar una matriz de objetos JSON a la vez, donde cada entrada de matriz se tratará como una entrada de base de datos separada, tiene dos opciones de sintaxis:
-
Matriz de objeto con posiciones de coma válidas y --json Indicador de matriz obligatorio
[ {obj1}, {obj2}, {obj3} ]
-
Use el archivo con un formato JSON básicamente incorrecto (es decir
,
falta,
entre instancias de objetos JSON y sin el indicador --jsonArray{obj1} {obj2} {obj3}
Si desea insertar solo una matriz (es decir, una matriz como ciudadano de nivel superior de su base de datos), creo que no es posible y no es válido, porque mongoDB, por definición, admite documentos como objetos de nivel superior que luego se asignan a objetos JSON. En otras palabras, debe envolver su matriz en un objeto JSON como señaló ALAN WARD.
La herramienta
mongoimport
tiene una opción:
--jsonArray
trata la fuente de entrada como una matriz JSON
O es posible importar desde un archivo
que contiene el mismo formato de datos que
El resultado del
db.collection.find()
.
Aquí hay un ejemplo del material de curso
university.mongodb.com
algún contenido de los
grades.json
:
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb577" }, "student_id" : 0, "type" : "exam", "score" : 54.6535436362647 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb578" }, "student_id" : 0, "type" : "quiz", "score" : 31.95004496742112 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb579" }, "student_id" : 0, "type" : "homework", "score" : 14.8504576811645 }
Como puedes ver,
ninguna matriz utilizada y
tampoco delimitadores de coma entre documentos.
Descubro, recientemente,
que esto cumple con
the JSON Lines text
formato de
the JSON Lines text
.
Como uno usado en el método
apache.spark.sql.DataFrameReader.json()
.
Quizás la siguiente referencia del blog del proyecto MongoDB podría ayudarlo a obtener información sobre cómo funcionan las matrices en Mongo:
https://blog.mlab.com/2013/04/thinking-about-arrays-in-mongodb/
De lo contrario, enmarcaría su importación y:
a) importe los tres objetos diferentes por separado en la colección como usted dice, usando la bandera --jsonArray; o
b) encapsular la matriz completa dentro de un solo objeto, por ejemplo de esta manera:
{
"mydata":
[
{
"project": "project_1",
...
"priority": 7
}
]
}
HTH