2012-07-23 13 views
15

Sono nuovo a mongodb e desidero conoscere l'importazione di un file json da un server a un altro. Ho provato il seguente comando mongoimport -d test -c bik check.json e funziona bene per me. Ora voglio sapere quando ci sono più file json come importarli tutti in una volta sola. Non sono riuscito a trovare alcun documento correlato dove è stato scritto questo non è possibile. Per favore aiutami è possibile e comeImportare più di 1 file json utilizzando mongoimport

risposta

17

Puoi sempre scrivere degli script di shell.

colls=(mycoll1 mycoll2 mycoll5) 

for c in ${colls[@]} 
do 
    mongoimport -d mydb -c $c.json 
done 
+0

Grazie lavorato magia – user850234

+2

Solo una query. Non è possibile definire un nome di directory e basta specificare il percorso della directory per importare tutti i file 'json' da esso invece di specificare espressamente il nome del file. Questo perché se ci sono diversi file allora dobbiamo specificare tutti i nomi dei file e poi fare il ciclo 'for' che è lo stesso di eseguire manualmente il comando' mongoimport' per ogni file. Può essere fatto in modo più dinamico? – user850234

+0

L'ho provato e non ha funzionato. Funziona con 'mongorestore', però. –

17

mi si avvicinò con un modo più elegante per importare automaticamente tutte le collezioni:

ls -1 *.json | sed 's/.json$//' | while read col; do 
    mongoimport -d db_name -c $col < $col.json; 
done 

Spero che questo sia utile.

+0

funzionato come un fascino! Io in realtà bisogno di importare i file TSV, così ho dovuto includere '' --headerline' e --type tsv' Abbastanza semplice. Grazie – agarcian

13

Windows versione Batch:

@echo off 
for %%f in (*.json) do (
    "mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json 
) 
+0

Grazie Tomi. Ho dovuto omettere --jsonArray perché avevo più file JSON che non erano inclusi in [] – ankit9j

0

Questo ha funzionato per me in Mac OS X

find . -regex '.*/[^/]*.json' | xargs -L 1 mongoimport --db DB_NAME -u USER_NAME -p PASSWORD --collection COLLECTION_NAME --file 
0

Per finestre file bat. Questo sarebbe molto meglio se hai una lista di file JSON nella cartella. e il nome della raccolta corrisponde al nome di file

@echo off 
for %%f in (*.json) do (
    "mongoimport.exe" --db databasename --collection %%~nf --drop --file %%f 
) 
pause 
1

si può fare in questo modo anche:

for filename in *; do mongoimport --db <Database> --collection <Collection Name> --file $filename; done 
0

ho intenzione di mostrare come importare molte collezioni in modo efficiente utilizzando solo terminale della Linux (funziona anche su Mac).

È necessario disporre di tutti i file JSON nella stessa cartella e il nome del file deve essere la raccolta che verrà importata nel database.

Quindi, iniziamo, apriamo la cartella che contiene i file json. Sostituire il <DATABASE> per il nome del database, quindi eseguire la linea di seguito:

for collection in $(ls | cut -d'.' -f1); do mongoimport --db <DATABASE> --collection ${collection} --file ${collection}.json; done

Ma quello che sta succedendo lì?

Prima di tutto, è necessario tenere presente che le parentesi verranno eseguite per prime. In questo caso, crea un elenco di tutti i file che ricevono solo il nome di ciascun file (rimuovendo la sua estensione).

In secondo luogo, tutta la lista verrà aggiunto a un ciclo "per" in una variabile locale chiamata di raccolta (il nome di questa variabile potrebbe essere tutto quello che vuoi)

In terzo luogo, il "fare" eseguire la linea di importazione (*)

Infine, "completato", completare il ciclo.

(*) La riga di importazione è composta da "mongoimport" che richiede il nome del database "--db", il nome della raccolta "--collection" e il nome del file "--file". Questi requisiti sono stati coperti dalla variabile "$ collection" creata sul "per" roba

Spero abbia aiutato qualcuno!Buona fortuna ragazzi :)

Problemi correlati