2012-06-12 21 views
38

Ho cercato di utilizzare mongo con alcuni dati importati, ma non sono in grado di usarlo correttamente con la descrizione del mio documento.Modo corretto di importare file json in mongo

Questo è un esempio del .json I Importa utilizzando mongoimport: https://gist.github.com/2917854

mongoimport -d test -c example data.json 

ho notato che tutto il mio documento è importato in un oggetto unico, nonostante la creazione di uno dei oggetto per ogni negozio.

Ecco perché quando provo a trovare un negozio o qualcosa che voglio interrogare, tutto il documento viene restituito.

db.example.find({"shops.name":"x"}) 

Voglio essere in grado di interrogare il db per ottenere prodotti dalla id utilizzando la notazione del punto qualcosa di simile a:

db.example.find({"shops.name":"x","categories.type":"shirts","clothes.id":"1"} 

Il problema è che tutto il documento viene importato come un singolo oggetto. La domanda è: come
devo importare l'oggetto per ottenere il risultato desiderato?

+1

tuo link ha un extra 'a' alla fine –

+0

@ ErenGüven Oops! Grazie per l'avviso! ;) – Nahikariii

risposta

36

Docs nota che:

Questa utility prende un singolo file che contiene 1 stringa JSON/CSV/TSV per linea e lo inserisce.

Nella struttura che si sta utilizzando -assuming gli errori sul significato sono fisso si sono essenzialmente importando un documento con un solo shops campo.

Dopo la rottura i dati in documenti di negozi separati, l'importazione utilizzando qualcosa di simile (negozi è il nome della raccolta, ha più senso rispetto all'utilizzo example):

mongoimport -d test -c shops data.json 

e quindi è possibile interrogare come:

db.shops.find({"name":x,"categories.type":"shirts"}) 
23

c'è un parametro --jsonArray:

Accetta importazione dei dati espressi con più documenti MongoDB all'interno di un singolo arr JSON ay

Utilizzando questa opzione è possibile alimentare un array, quindi è sufficiente rimuovere la sintassi dell'oggetto esterno, cioè tutto all'inizio fino a includere "shops" : e } alla fine.

uso io un piccolo strumento chiamato jq in grado di estrarre l'array da linea di comando:

./jq '.shops' shops.json 
0

Importazione di un JSON

Il comando mongoimport ci permette di importare leggibili JSON in un database specifico & una collezione.Per importare un dato JSON in un database specifico & una raccolta, tipo mongoimport -d databaseName -c collectionName jsonFileName.json

8

IMPORT DA JSON

mongoimport --db "databaseName" --collection "collectionName" --type json --file "fileName.json" --jsonArray 

formato JSON dovrebbe essere in questo formato. (Array di oggetti)

[ 
    { name: "Name1", msg: "This is msg 1" }, 
    { name: "Name2", msg: "This is msg 2" }, 
    { name: "Name3", msg: "This is msg 3" } 
] 

Importa da un CSV

mongoimport --db "databaseName" --collection "collectionName" --type csv --file "fileName.csv" --headerline 

Ulteriori informazioni

https://docs.mongodb.com/getting-started/shell/import-data/

Problemi correlati