Linux脚本执行MongoDB查询,关于mongodb:如何通过shell脚本执行mongo命令?

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

#!/bin/sh

mongo myDbName

db.mycollection.findOne()

show collections

当我通过./test.sh执行此脚本时,将建立与MongoDB的连接,但不执行以下命令。

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

您还可以使用--eval标志评估命令,如果它只是一个命令。

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

请注意:如果您使用的是Mongo运算符,从$符号开始,您需要用单引号括起eval参数,以防止shell将运算符作为环境变量进行求值:

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 :

对于.find()操作,您需要对结果对象调用操作以打印文档,例如toArray()或shellPrint()。例如,mongo userdb --eval"printjson(db.users.find().toArray())"

我必须指定连接字符串,如mongo :/ db --eval"printjson(db.serverStatus())"或mongo :/ db 谢谢@Gingi - 我的首选方法是mongo mydb --eval"db.users.find({a:'b'}).pretty().shellPrint()" ... simples :)

我希望我能得到所有的结果,而不是看到它为"更多"打字"打字"

虽然这有效,但问题是不仅发送了查询结果而且还发送了连接状态消息等噪声:MongoDB shell版本:2.6.0连接到:myhost DBQuery:mydb.mycollection - > {} MongoDB shell版本:2.6 .0连接到:myhost query result更多噪音

如何定义我的servername和dbname?

@Amida你可以做mongo --eval"db.version()" --quiet,以避免打印你说的所有噪音

如果您想要有效的JSON输出,请使用JSON.stringify()而不是printjson()

mongo --eval"db.test.update({"name":"foo"},{$set:{"this":"that"}});"> E QUERY SyntaxError: Unexpected token :如果您看到此错误,请不要尝试使用单引号或双引号中的文本$ set来解决此问题,这会导致数据丢失,因为脚本会将$set理解为新属性且没有$ set,文档被新文档覆盖,其中包含一些像"": this:"that"这样的字段。

双引号版本如果你转义任何这样的$运算符都有效:mongo --eval"db.${Collection}.updateMany({},{ \$set: {${Field}:${Va

你可能感兴趣的:(Linux脚本执行MongoDB查询,关于mongodb:如何通过shell脚本执行mongo命令?)