我想在shell脚本中执行mongo命令,例如在脚本test.sh中:
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
当我通过./test.sh执行这个脚本时,会建立到MongoDB的连接,但不会执行以下命令。
如何通过shell脚本test.sh执行其他命令?
我想在shell脚本中执行mongo命令,例如在脚本test.sh中:
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
当我通过./test.sh执行这个脚本时,会建立到MongoDB的连接,但不会执行以下命令。
如何通过shell脚本test.sh执行其他命令?
当前回答
下面的shell脚本也很适合我……definite不得不使用Antonin一开始提到的重定向…这让我产生了测试这里文档的想法。
function testMongoScript {
mongo <<EOF
use mydb
db.leads.findOne()
db.leads.find().count()
EOF
}
其他回答
遗留的mongo shell已从MongoDB中移除,并将于2022年发布第6版
有一种使用新shell mongosh执行shell脚本的新方法
来自编写脚本的shell文档:
您可以使用mongosh从命令行执行脚本,而无需进入mongosh控制台 要指定文件名,请使用——file或-f参数指定文件名 您可能还需要指定连接信息
关于这一点也有一个官方文档页面。
该页面的例子包括:
mongo server:27017/dbname --quiet my_commands.js
mongo test --eval "printjson(db.getCollectionNames())"
如果您已启用身份验证:
mongo -u username -p password --authenticationDatabase auth_db_name < your_script.js
更新版本
mongosh -u username -p password --authenticationDatabase auth_db_name < your_script.js
这适用于我在Linux下:
mongo < script.js
mongodb的更新版本
mongosh < script.js
在我的情况下,我可以方便地使用\n作为分隔符的下一个mongo命令,我想要执行,然后管道他们到mongo
echo $'use your_db\ndb.yourCollection.find()' | mongo
更新版本的mongodb
echo $'use your_db\ndb.yourCollection.find()' | mongosh