programing

mongoimport를 사용하여 1개 이상의 json 파일 가져오기

padding 2023. 6. 22. 21:36
반응형

mongoimport를 사용하여 1개 이상의 json 파일 가져오기

는 처입니가 입니다.mongodb그리고 수입에 대해 알고 싶습니다.json한 서버에서 다른 서버로 파일을 전송합니다.과 같은 명령을 했습니다.mongoimport -d test -c bik check.json저한테는 잘 맞습니다.이제 나는 언제가 여러 개인지 알고 싶습니다.json파일 한 번에 모든 파일을 가져오려면 어떻게 해야 합니까?저는 이것이 불가능하다고 쓰여 있는 관련 서류를 찾을 수 없었습니다.한지 그리고 .

모든 컬렉션을 자동으로 가져올 수 있는 보다 우아한 방법을 생각해 냈습니다.

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

이것이 도움이 되기를 바랍니다.

셸 스크립트는 언제든지 작성할 수 있습니다.

colls=( mycoll1 mycoll2 mycoll5 )

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

Windows 배치 버전:

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

다음과 같은 방법으로도 할 수 있습니다.

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

이것은 MAC OS X에서 작동했습니다.

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

Windows bat 파일의 경우.이것은 당신이 폴더에 json 파일 목록을 가지고 있다면 훨씬 더 좋을 것입니다.수집 이름이 파일의 이름과 일치합니다.

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

, 새운기모르만지겠는지능인로,.mongoimport이제 실제로 stdin에서 읽을 수 있습니다.따라서 여러 JSON 파일을 가져오기 위해 수행할 수 있는 작업은 다음과 같이 간단합니다.

cat *.json | mongoimport --uri "mongdb://user:password@host/db?option=value" --collection example

저는 mongodb-tools v4.2.0 btw를 사용하고 있습니다.

갱신하다

mongodbimport잠재적으로 많은 양의 메모리를 소비하여 시스템 OOM에 의해 프로그램이 중지될 수 있습니다.컴퓨터에 32GB RAM이 있는데 RAM 디스크에 저장된 최대 10GB의 데이터를 가져오려고 할 때 이 문제가 계속 발생했습니다.

비교적 큰 작업을 배치로 나누는 방법

#!/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:pass@host/db" --collection=examples -j8 #--mode=upsert --upsertFields=id1
        json_files=()
    fi
done

다른 한 줄 솔루션(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"

또는 폴더의 모든 파일:

> cat *.json > big.json

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

한 줄 솔루션:

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

리눅스의 터미널만 사용하여 많은 컬렉션을 효율적으로 가져오는 방법을 보여드리겠습니다(Mac에서도 작동합니다).

모든 json 파일이 동일한 폴더에 있어야 하며 파일 이름은 데이터베이스로 가져올 컬렉션이어야 합니다.

먼저 json 파일이 들어 있는 폴더를 엽니다.를 합니다.<DATABASE>데이터베이스 이름으로 이동한 다음 아래 행을 실행합니다.

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

그런데 거기서 무슨 일이 벌어지고 있는 걸까요?

우선 괄호가 먼저 실행된다는 것을 명심해야 합니다.이 경우 확장명을 제거한 각 파일의 이름만 가져오는 모든 파일 목록을 만듭니다.

두 번째로, 모든 목록이 컬렉션이라는 로컬 변수의 "for" 루프에 추가됩니다(이 변수의 이름은 원하는 것이 될 수 있습니다).

셋째, "do"는 가져오기 라인을 실행합니다(*).

마지막으로 "완료"하고 루프를 종료합니다.

(*) 가져오기 줄은 데이터베이스 이름 "--db", 컬렉션 이름 "--collection" 및 파일 이름 "--file"을 필요로 하는 "mongoimport"로 구성됩니다.이러한 요구 사항은 "for" 항목에 생성된 변수 "$collection"으로 채워졌습니다.

누군가를 도왔으면 좋겠어요!행운을 빌어요 여러분 :)

저는 이를 신속하게 수행하기 위해 여기에 있는 솔루션을 사용하여 bash 프로필에 셸 기능을 추가했습니다.

이 예제는 각 컬렉션을 컬렉션 이름과 함께 파일로 출력하는 mongo 내보내기에 따라 달라집니다..metadata.json연장의

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

내보내기 파일의 경로에서 사용하여 DB 이름을 명령에 전달...

mimport my_db

모든 컬렉션을 localhost의 DB에 로드합니다.

파이썬:

from pathlib import Path
import subprocess

jsons_folder = "./out/"
mongodb_host = "172.22.0.3"
mongodb_port = "27017"
mongodb_user = "root"
mongodb_password = "1234"

for f in Path(jsons_folder).glob("*.json"):
    cmd = [
        "mongoimport", "-h", mongodb_host, "-p", mongodb_port, "--authenticationDatabase", "admin",
        "-u", mongodb_user, "-p", mongodb_password,
        "--db", "callscoring", "--collection", "scoring_result_entry", str(f.absolute())
    ]
    subprocess.run(cmd)

언급URL : https://stackoverflow.com/questions/11609647/import-more-than-1-json-file-using-mongoimport

반응형