Импорт более 1 файла json с использованием mongoimport

Я новичок в mongodb и хочу знать об импорте файла json с одного сервера на другой. Я попробовал следующую команду mongoimport -d test -c bik check.json, и она отлично работает для меня. Теперь я хочу знать, когда есть несколько файлов json, как я могу их импортировать за один раз. Я не мог найти какой-либо связанный документ, где это написано, это невозможно. Пожалуйста, помогите мне, это возможно и как

Ответы

Ответ 1

Вы всегда можете написать сценарии оболочки.

colls=( mycoll1 mycoll2 mycoll5 )

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

Ответ 2

Я придумал более элегантный способ автоматического импорта всех коллекций:

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

Я надеюсь, что это будет полезно.

Ответ 3

Пакетная версия Windows:

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

Ответ 4

Вы также можете сделать это:

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

Ответ 5

Это работало для меня в MAC OS X

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

Ответ 6

Для файла windows bat. Это было бы лучше, если у вас есть список json файлов в папке. и имя коллекции соответствует имени в файлах

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

Ответ 7

Другое однострочное решение (если вы находитесь в папке, где находятся json файлы):

ls | sed 's/.json$//' | xargs -I{} mongoimport -d DATABASE_NAME -c {} {}.json

Ответ 8

Я собираюсь показать, как эффективно импортировать множество коллекций, используя только терминал Linux (он также работает на Mac).

У вас должны быть все json файлы в одной папке, а имя файла должно быть коллекцией, которая будет импортирована в вашу базу данных.

Итак, давайте начнем, откройте папку, содержащую ваши json файлы. Замените <DATABASE> на ваше имя базы данных, затем выполните следующую строку:

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

Но что там происходит?

Прежде всего, вы должны иметь в виду, что скобки будут выполняться первыми. В этом случае он создает список всех файлов, получающих только имя каждого файла (удаление его расширения).

Во-вторых, весь список будет добавлен в цикл "for" в локальной переменной, называемой collection (это имя переменной может быть любым, что вы хотите)

В-третьих, "do" выполняет строку импорта (*)

Наконец, "сделано", завершите цикл.

(*) Линия импорта состоит из "mongoimport", для которого требуется имя базы данных "--db", имя коллекции "--collection" и имя файла "--file". Эти требования были заполнены переменной "$ collection", созданной на основе "для"

Надеюсь, кто-то помог! Удачи, ребята:)

Ответ 9

Я использовал решения здесь, чтобы добавить функцию оболочки в мой профиль bash, чтобы сделать это быстро.

Мой пример зависит от экспорта mongo, выводящего каждую коллекцию в виде файла с именем коллекции и расширением .metadata.json.

function mimport() { for filename in *; do collection="${filename%.metadata.json}"; mongoimport --db $1 --collection $collection --file $filename; done }

Используйте путь к файлам экспорта, передавая имя базы данных в команду...

mimport my_db

Будут загружены все коллекции в БД на localhost.

Ответ 10

Linux:

> cat one.json two.json > three.json

> mongoimport --db foo --collection baz --file three.json"

Или все файлы в папке:

> cat *.json > big.json

> mongoimport --db foo --collection baz --file "big.json"

Ответ 11

Одноканальное решение:

for/F %i in ('dir/bc:\files\*.json') do mongoimport.exe/d db/c files/file c:\file\%i

Ответ 12

Не уверен, что это новая функция, но mongoimport теперь может читать со стандартного ввода. Таким образом, можно импортировать несколько файлов JSON так же просто, как

cat *.json | mongoimport --uri "mongdb://user:[email protected]/db?option=value" --collection example

Я использую mongodb-tools v4.2.0, кстати.

UPDATE

mongodbimport потенциально может потреблять большой объем памяти, что может привести к уничтожению программы системой OOM. Моя машина получила 32 ГБ оперативной памяти, и это происходило последовательно, когда я пытался импортировать ~ 10 ГБ данных, которые хранятся на RAM-диске.

Чтобы разделить относительно большую работу на партии:

#!/usr/bin/env bash

declare -a json_files=()
for f in *.json; do
    json_files+="$f"
    if [[ "${#json_files[@]}" -ge 1000 ]]; then
        cat "${json_files[@]}" | mongoimport --uri="mongodb://user:[email protected]/db" --collection=examples -j8 #--mode=upsert --upsertFields=id1
        json_files=()
    fi
done