Je suis nouveau sur mongodb
et je veux savoir comment importer un fichier json
d’un serveur à un autre. J'ai essayé la commande suivante mongoimport -d test -c bik check.json
et cela fonctionne bien pour moi. Maintenant, je veux savoir quand il y a plusieurs fichiers json
, comment puis-je les importer tous en même temps. Je n'ai pu trouver aucun document lié dans lequel il est écrit que ce n'est pas possible. S'il vous plaît aidez-moi est-ce possible et comment
Vous pouvez toujours écrire des scripts Shell.
colls=( mycoll1 mycoll2 mycoll5 )
for c in ${colls[@]}
do
mongoimport -d mydb -c $c.json
done
J'ai mis au point un moyen plus élégant d'importer automatiquement TOUTES les collections:
ls -1 *.json | sed 's/.json$//' | while read col; do
mongoimport -d db_name -c $col < $col.json;
done
J'espère que ceci est utile.
Version Windows Batch:
@echo off
for %%f in (*.json) do (
"mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json
)
Vous pouvez le faire de cette manière aussi:
for filename in *; do mongoimport --db <Database> --collection <Collection Name> --file $filename; done
Cela a fonctionné pour moi dans MAC OS X
find . -regex '.*/[^/]*.json' | xargs -L 1 mongoimport --db DB_NAME -u USER_NAME -p PASSWORD --collection COLLECTION_NAME --file
Une autre solution sur une ligne (en supposant que vous soyez dans le dossier où se trouvent les fichiers JSON):
ls | sed 's/.json$//' | xargs -I{} mongoimport -d DATABASE_NAME -c {} {}.json
Linux:
> cat one.json two.json > three.json
> mongoimport --db foo --collection baz --file three.json"
Ou, tous les fichiers du dossier:
> cat *.json > big.json
> mongoimport --db foo --collection baz --file "big.json"
Pour windows fichier bat. Ce serait bien mieux si vous avez une liste de fichiers JSON dans le dossier. et le nom de la collection correspond au nom dans les fichiers
@echo off
for %%f in (*.json) do (
"mongoimport.exe" --db databasename --collection %%~nf --drop --file %%f
)
pause
J'ai utilisé les solutions ici pour ajouter une fonction Shell à mon profil bash afin de procéder rapidement.
Mon exemple dépend de l’exportation mongo produisant chaque collection sous forme de fichier avec le nom de la collection et l’extension .metadata.json
.
function mimport() {
for filename in *; do
collection="${filename%.metadata.json}";
mongoimport --db $1 --collection $collection --file $filename;
done
}
Utilisez dans le chemin des fichiers d'exportation en passant le nom de la base de données à la commande ...
mimport my_db
Va charger toutes les collections dans la base de données chez localhost.
Je vais vous montrer comment importer efficacement de nombreuses collections en utilisant uniquement le terminal de Linux (cela fonctionne également sous Mac).
Vous devez avoir tous les fichiers JSON dans le même dossier et le nom du fichier doit correspondre à la collection qui sera importée dans votre base de données.
Commençons donc par ouvrir le dossier contenant vos fichiers json. Remplacez le <DATABASE>
par le nom de votre base de données, puis exécutez la ligne ci-dessous:
for collection in $(ls | cut -d'.' -f1); do mongoimport --db <DATABASE> --collection ${collection} --file ${collection}.json; done
Mais que se passe-t-il?
Tout d'abord, vous devez garder à l'esprit que les parenthèses seront exécutées en premier. Dans ce cas, il crée une liste de tous les fichiers en n'obtenant que le nom de chaque fichier (en supprimant son extension).
Deuxièmement, toute la liste sera ajoutée à une boucle "pour" dans une variable locale appelée collection (le nom de cette variable peut être celui que vous souhaitiez)
Troisièmement, le "do" exécute la ligne d'importation (*)
Enfin le "fait", terminez la boucle.
(*) La ligne d'importation est composée de "mongoimport" qui nécessite le nom de la base de données "--db", le nom de la collection "--collection" et le nom du fichier "--file". Ces exigences ont été remplies par la variable "$ collection" créée sur le "pour"
J'espère aidé quelqu'un! Bonne chance les gars :)