我想在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执行其他命令?
当前回答
mongo db_name --eval "db.user_info.find().forEach(function(o) {print(o._id);})"
其他回答
如果你想用一条线来处理它,这是一个简单的方法。
file.sh --> db.EXPECTED_COLLECTION.remove("_id":1234)
cat file.sh | mongo <EXPECTED_COLLECTION>
下面的shell脚本也很适合我……definite不得不使用Antonin一开始提到的重定向…这让我产生了测试这里文档的想法。
function testMongoScript {
mongo <<EOF
use mydb
db.leads.findOne()
db.leads.find().count()
EOF
}
正如tuxracer所建议的,你可以使用eval命令,对于那些像我一样缺少它的人,如果你不试图在默认db上执行form操作,你也可以添加你的db名称。
mongo <dbname> --eval "printjson(db.something.find())"
更新版本的mongodb
mongosh <dbname> --eval "printjson(db.something.find())"
在我的设置中,我必须使用:
mongo --host="the.server.ip:port" databaseName theScript.js
mongodb的更新版本
mongosh --host="the.server.ip:port" databaseName theScript.js
这适用于我在Linux下:
mongo < script.js
mongodb的更新版本
mongosh < script.js