[MONGODB] 어떻게 쉘 스크립트를 통해 몽고 명령을 실행합니다?
MONGODB어떻게 쉘 스크립트를 통해 몽고 명령을 실행합니다?
나는 쉘 스크립트, 예를 들어,에 몽고 명령을 실행하려면 스크립트 test.sh에서 :
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
내가 ./test.sh를 통해이 스크립트를 실행하면 다음 MongoDB에 대한 연결이 설정되어 있지만, 다음과 같은 명령이 실행되지 않습니다.
어떻게 쉘 스크립트 test.sh을 통해 다른 명령을 실행합니다?
해결법
-
==============================
1.그것은 단지 하나의 명령 인 경우 당신은 또한 --eval 플래그를 사용하여 명령을 평가할 수 있습니다.
그것은 단지 하나의 명령 인 경우 당신은 또한 --eval 플래그를 사용하여 명령을 평가할 수 있습니다.
mongo --eval "printjson(db.serverStatus())"
참고 :이 $ 기호로 시작, 몽고 연산자를 사용하는 경우, 당신은 환경 변수로 운영자 평가에서 쉘을 유지하기 위해 작은 따옴표로 평가 인수를 둘러싸고 싶을 것이다 :
mongo --eval 'db.mycollection.update({"name":"foo"},{$set:{"this":"that"}});' myDbName
그렇지 않으면이 같은 것을 볼 수 있습니다 :
mongo --eval "db.test.update({\"name\":\"foo\"},{$set:{\"this\":\"that\"}});" > E QUERY SyntaxError: Unexpected token :
-
==============================
2.은 .js 파일로 몽고 스크립트를 넣습니다.
은 .js 파일로 몽고 스크립트를 넣습니다.
이어서 몽고
전의:
demo.js // 파일은 스크립트가 있습니다
use sample //db name show collections
이 파일을 보관 "C : \ DB-스크립트"
그런 다음에 cmd를 프롬프트 이동에서 "C : \ DB-스크립트"
C:\db-scripts>mongo < demo.js
이것은 몽고 및 표시 출력 코드를 실행할
C:\db-scripts>mongo < demo.js Mongo shell version: 3.0.4 Connecting to: test switched to db sample users //collection name tasks //collection name bye C:\db-scripts>
-
==============================
3.이것은 리눅스에서 나를 위해 작동합니다 :
이것은 리눅스에서 나를 위해 작동합니다 :
mongo < script.js
-
==============================
4.라는 파일 test.js이 넣어 :
라는 파일 test.js이 넣어 :
db.mycollection.findOne() db.getCollectionNames().forEach(function(collection) { print(collection); });
다음 몽고 myDbName test.js.으로 실행
-
==============================
5.뿐만 아니라이에 대한 공식 문서 페이지가있다.
뿐만 아니라이에 대한 공식 문서 페이지가있다.
해당 페이지에서 예는 다음과 같습니다
mongo server:27017/dbname --quiet my_commands.js mongo test --eval "printjson(db.getCollectionNames())"
-
==============================
6.아래의 쉘 스크립트는 나를 위해 잘 작동 ... 명확한는 안토닌 처음에 언급 한 리디렉션 ... 나에게 여기 문서를 테스트 할 수있는 아이디어를 준 사용했다.
아래의 쉘 스크립트는 나를 위해 잘 작동 ... 명확한는 안토닌 처음에 언급 한 리디렉션 ... 나에게 여기 문서를 테스트 할 수있는 아이디어를 준 사용했다.
function testMongoScript { mongo <<EOF use mydb db.leads.findOne() db.leads.find().count() EOF }
-
==============================
7.내 설정에서 나는 사용해야합니다 :
내 설정에서 나는 사용해야합니다 :
mongo --host="the.server.ip:port" databaseName theScript.js
-
==============================
8.나는 다윗 젊은 언급은 "히어 닥"구문을 사용합니다. 그러나 캐치가있다 :
나는 다윗 젊은 언급은 "히어 닥"구문을 사용합니다. 그러나 캐치가있다 :
#!/usr/bin/sh mongo <db> <<EOF db.<collection>.find({ fieldName: { $exists: true } }) .forEach( printjson ); EOF
문구가 쉘 볼과라는 이름의 환경 변수의 값으로 대체 될 것 "존재 $"때문에 위하지 않습니다 일, "존재한다." 어떤 가능성 때문에 쉘 확장 후에는되고, 존재하지 않는 :
#!/usr/bin/sh mongo <db> <<EOF db.<collection>.find({ fieldName: { : true } }) .forEach( printjson ); EOF
당신은 두 가지 옵션을 통해이하기 위해서는 그것을 전달합니다. 하나 하나가 아주 좋은, 추한입니다. 첫째, 추한 하나는 $ 표시를 탈출 :
#!/usr/bin/sh mongo <db> <<EOF db.<collection>.find({ fieldName: { \$exists: true } }) .forEach( printjson ); EOF
이 탈출하는 것을 잊지 쉽게 때문에,이 사용하지 않는 것이 좋습니다.
다른 옵션은이처럼 EOF를 탈출하는 것입니다 :
#!/usr/bin/sh mongo <db> <<\EOF db.<collection>.find({ fieldName: { $exists: true } }) .forEach( printjson ); EOF
지금, 당신은 당신의 히어 닥 당신이 원하는 모든 달러 기호를 넣을 수 있고, 달러 기호는 무시됩니다. 아래쪽 측면 : 당신이 당신의 몽고 스크립트에서 쉘 매개 변수 / 변수를 넣어해야하는 경우 문제가 해결되지 않습니다.
당신이 놀 수있는 또 다른 옵션은 오두막 엉망이다. 예를 들어,
#!/bin/env mongo <some mongo stuff>
이 솔루션에 여러 가지 문제가 있습니다 :
나는 당신이 일 것이라고 생각 것 오두막에 데이터베이스 이름을 추가 노력했다. 불행하게도, (인용 것처럼) 첫 번째 공간이 ENV 명령에 하나의 매개 변수로 전달 된 후 방식 시스템은 오두막 라인, 모든 것을 처리하고 ENV 찾아 실행하는 데 실패합니다.
대신, 스크립트 자체 내에서 데이터베이스 변경을 포함과 같이해야합니다 :
#!/bin/env mongo db = db.getSiblingDB('<db>'); <your script>
인생에서 아무것도처럼, "그것을 하나 개 이상의 방법이있다!"
-
==============================
9.혹시 인증을 사용하도록 설정 :
혹시 인증을 사용하도록 설정 :
mongo -u username -p password --authenticationDatabase auth_db_name < your_script.js
-
==============================
10.스크립트 파일을 생성; 쓰기 명령 :
스크립트 파일을 생성; 쓰기 명령 :
#!/bin/sh mongo < file.js
file.js에 몽고의 쿼리를 작성 :
db.collection.find({"myValue":null}).count();
-
==============================
11.이건 어때요:
이건 어때요:
echo "db.mycollection.findOne()" | mongo myDbName echo "show collections" | mongo myDbName
-
==============================
12.기본 DB에 예비 작업에 노력하지 않으면 theTuxRacer에 의해 제안으로, 당신은 내가처럼 그것을 누락 사람들을위한 평가 명령을 사용할 수 있습니다, 당신은 또한 당신의 DB 이름을 추가 할 수 있습니다.
기본 DB에 예비 작업에 노력하지 않으면 theTuxRacer에 의해 제안으로, 당신은 내가처럼 그것을 누락 사람들을위한 평가 명령을 사용할 수 있습니다, 당신은 또한 당신의 DB 이름을 추가 할 수 있습니다.
mongo <dbname> --eval "printjson(db.something.find())"
-
==============================
13.당신의 printf 감사합니다! 리눅스 환경에서, 여기에 하나의 파일이 쇼를 실행해야하는 더 좋은 방법입니다. 당신이 두 개의 파일, 여러 명령을 mongoCmds.js을 가지고 말 :
당신의 printf 감사합니다! 리눅스 환경에서, 여기에 하나의 파일이 쇼를 실행해야하는 더 좋은 방법입니다. 당신이 두 개의 파일, 여러 명령을 mongoCmds.js을 가지고 말 :
use someDb db.someColl.find()
다음 드라이버 쉘 파일, runMongoCmds.sh
mongo < mongoCmds.js
대신, runMongoCmds.sh이 포함 된, 하나 개의 파일이
printf "use someDb\ndb.someColl.find()" | mongo
강타의 printf와 훨씬 더 강력한 에코보다와 수 있습니다 \ n 명령 사이에 여러 줄에 그들을 강제로.
-
==============================
14.
mongo <<EOF use <db_name> db.getCollection("<collection_name>").find({}) EOF
-
==============================
15.--shell 플래그는 자바 스크립트 파일도 사용할 수 있습니다
--shell 플래그는 자바 스크립트 파일도 사용할 수 있습니다
mongo --shell /path/to/jsfile/test.js
-
==============================
16.
mongo db_name --eval "db.user_info.find().forEach(function(o) {print(o._id);})"
-
==============================
17.내 경우에는, 내가 편리하게 사용할 수 있습니다 \ n 다음 몽고 명령에 대한 구분자로 나는 몽고에 다음 관에게이를 실행할
내 경우에는, 내가 편리하게 사용할 수 있습니다 \ n 다음 몽고 명령에 대한 구분자로 나는 몽고에 다음 관에게이를 실행할
echo $'use your_db\ndb.yourCollection.find()' | mongo
-
==============================
18.한 줄에 그것을 처리하는 경우 쉬운 방법입니다.
한 줄에 그것을 처리하는 경우 쉬운 방법입니다.
file.sh --> db.EXPECTED_COLLECTION.remove("_id":1234) cat file.sh | mongo <EXPECTED_COLLECTION>
-
==============================
19.최근 MongoDB의에서 포스트 그레스로 마이그레이션. 이것은 내가 스크립트를 사용하는 방법이다.
최근 MongoDB의에서 포스트 그레스로 마이그레이션. 이것은 내가 스크립트를 사용하는 방법이다.
mongo < scripts.js > inserts.sql
inserts.sql에 scripts.js 및 출력 리디렉션을 읽어보십시오.
이 같은 scripts.js의 모습
use myDb; var string = "INSERT INTO table(a, b) VALUES"; db.getCollection('collectionName').find({}).forEach(function (object) { string += "('" + String(object.description) + "','" + object.name + "'),"; }); print(string.substring(0, string.length - 1), ";");
이 같은 inserts.sql 모습
INSERT INTO table(a, b) VALUES('abc', 'Alice'), ('def', 'Bob'), ('ghi', 'Claire');
-
==============================
20.나는 더 큰 배쉬 스크립트 내에서 몽고 쉘 스크립트를 실행하기위한 다양한 옵션을 썼다
나는 더 큰 배쉬 스크립트 내에서 몽고 쉘 스크립트를 실행하기위한 다양한 옵션을 썼다
-
==============================
21.몽고 인수 (--quiet, DBNAME 등)을 전달하는 능력을 가진 싱글 쉘 스크립트 솔루션 :
몽고 인수 (--quiet, DBNAME 등)을 전달하는 능력을 가진 싱글 쉘 스크립트 솔루션 :
#!/usr/bin/env -S mongo --quiet localhost:27017/test cur = db.myCollection.find({}); while(cur.hasNext()) { printjson(cur.next()); }
-s 플래그는 모든 플랫폼에서 작동하지 않을 수 있습니다.
-
==============================
22.replicaset를 사용하는 경우 나는 보통 호스트가 마스터 인 알아낼 필요 피할 수있는 다음과 같은 구문을 사용하므로, 쓰기는 PRIMARY에서 수행해야합니다 :
replicaset를 사용하는 경우 나는 보통 호스트가 마스터 인 알아낼 필요 피할 수있는 다음과 같은 구문을 사용하므로, 쓰기는 PRIMARY에서 수행해야합니다 :
몽고 -host myReplicaset / anyKnownReplica
from https://stackoverflow.com/questions/4837673/how-to-execute-mongo-commands-through-shell-scripts by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스의 배열 스키마로 개체를 추진 (0) | 2019.12.02 |
---|---|
[MONGODB] 어떻게 MongoDB의 모든 문서에 대한 필드 이름을 바꿀 수 있습니다? (0) | 2019.12.02 |
[MONGODB] MongoDB의 컬렉션 모든 문서에 새 필드를 추가 (0) | 2019.12.02 |
[MONGODB] 어떻게 몽구스의 문서 upsert / 업데이트하려면 어떻게해야합니까? (0) | 2019.12.02 |
[MONGODB] 어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있습니까? (0) | 2019.12.02 |