mongo
쉘 스크립트, 예를 들어 스크립트에서 명령 을 실행하고 싶습니다 test.sh
.
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
를 통해이 스크립트를 실행하면 ./test.sh
MongoDB에 대한 연결이 설정되지만 다음 명령은 실행되지 않습니다.
쉘 스크립트를 통해 다른 명령을 실행하는 방법은 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