我想在shell脚本中执行mongo命令,例如在脚本test.sh中:

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

当我通过./test.sh执行这个脚本时,会建立到MongoDB的连接,但不会执行以下命令。

如何通过shell脚本test.sh执行其他命令?


当前回答

关于这一点也有一个官方文档页面。

该页面的例子包括:

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

其他回答

这适用于我在Linux下:

mongo < script.js

mongodb的更新版本

mongosh < script.js

正如tuxracer所建议的,你可以使用eval命令,对于那些像我一样缺少它的人,如果你不试图在默认db上执行form操作,你也可以添加你的db名称。

mongo <dbname> --eval "printjson(db.something.find())"

更新版本的mongodb

mongosh <dbname> --eval "printjson(db.something.find())"

关于这一点也有一个官方文档页面。

该页面的例子包括:

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

在我的情况下,我可以方便地使用\n作为分隔符的下一个mongo命令,我想要执行,然后管道他们到mongo

echo $'use your_db\ndb.yourCollection.find()' | mongo

更新版本的mongodb

echo $'use your_db\ndb.yourCollection.find()' | mongosh

这个怎么样:

echo "db.mycollection.findOne()" | mongo myDbName
echo "show collections" | mongo myDbName