[mongodb] 쉘 스크립트를 통해 mongo 명령을 실행하는 방법은 무엇입니까?

mongo쉘 스크립트, 예를 들어 스크립트에서 명령 을 실행하고 싶습니다 test.sh.

#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections

를 통해이 스크립트를 실행하면 ./test.shMongoDB에 대한 연결이 설정되지만 다음 명령은 실행되지 않습니다.

쉘 스크립트를 통해 다른 명령을 실행하는 방법은 test.sh무엇입니까?



답변

--eval단일 명령 인 경우 플래그를 사용하여 명령을 평가할 수도 있습니다 .

mongo --eval "printjson(db.serverStatus())"

참고 : $ 부호로 시작하는 Mongo 연산자를 사용하는 경우 쉘이 연산자를 환경 변수로 평가하지 못하도록 eval 인수를 작은 따옴표로 묶어야합니다.

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 :


답변

몽고 스크립트를 .js파일에 넣으십시오 .

그런 다음 실행 mongo < yourFile.js

전의:

demo.js // 파일에는 스크립트가 있습니다

use sample  //db name
show collections

이 파일을 “c : \ db-scripts”에 보관하십시오

그런 다음 cmd 프롬프트에서 “c : \ db-scripts”로 이동하십시오.

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>


답변

이것은 Linux에서 저에게 효과적입니다.

mongo < script.js


답변

이것을 다음이라는 파일에 넣으십시오 test.js.

db.mycollection.findOne()
db.getCollectionNames().forEach(function(collection) {
  print(collection);
});

그런 다음로 실행하십시오 mongo myDbName test.js.


답변

이것에 대한 공식 문서 페이지도 있습니다.

해당 페이지의 예는 다음과 같습니다.

mongo server:27017/dbname --quiet my_commands.js
mongo test --eval "printjson(db.getCollectionNames())"


답변

아래의 쉘 스크립트는 저에게도 훌륭하게 작동했습니다 … Antonin이 처음 언급 한 리디렉션을 사용해야했습니다 … 여기서 여기 문서를 테스트 할 아이디어가있었습니다.

function testMongoScript {
    mongo <<EOF
    use mydb
    db.leads.findOne()
    db.leads.find().count()
EOF
}


답변

내 설정에서는 다음을 사용해야합니다.

mongo --host="the.server.ip:port" databaseName theScript.js