java调用js查询mongo_如何通过shell脚本执行mongo命令?

我使用了David Young提到的“heredoc”语法 . 但是有一个问题:

#!/usr/bin/sh

mongo <

db..find({

fieldName: { $exists: true }

})

.forEach( printjson );

EOF

以上操作不起作用,因为shell将看到短语“$ exists”,并用名为“exists”的环境变量的值替换 . 这可能不存在,所以在shell扩展后,它变为:

#!/usr/bin/sh

mongo <

db..find({

fieldName: { : true }

})

.forEach( printjson );

EOF

为了让它通过你有两个选择 . 一个是丑陋的,一个是相当不错的 . 首先,丑陋的一个:逃避$符号:

#!/usr/bin/sh

mongo <

db..find({

fieldName: { \$exists: true }

})

.forEach( printjson );

EOF

我不推荐这个,因为很容易忘记逃避 .

另一种选择是逃避EOF,如下所示:

#!/usr/bin/sh

mongo <

db..find({

fieldName: { $exists: true }

})

.forEach( printjson );

EOF

现在,您可以将所需的所有美元符号放在您的heredoc中,并忽略美元符号 . 缺点:如果你需要在你的mongo脚本中放置shell参数/变量,这不起作用 .

你可以玩的另一个选择是弄乱你的shebang . 例如,

#!/bin/env mongo

这个解决方案有几个问题:

仅当您尝试从命令行生成mongo shell脚本时,它才有效 . 您不能将常规shell命令与mongo shell命令混合使用 . 而你所节省的就是不必在命令行输入“mongo”...(当然,足够的理由)

它的功能与“mongo ”完全相同,这意味着它不允许您使用“use ”命令 .

我已经尝试将数据库名称添加到shebang,您认为它可以工作 . 不幸的是,系统处理shebang行的方式,第一个空格之后的所有内容都作为单个参数(如同引用)传递给env命令,并且env无法找到并运行它 .

相反,您必须在脚本本身中嵌入数据库更改,如下所示:

#!/bin/env mongo

db = db.getSiblingDB('');

与生活中的任何事物一样,“有不止一种方法可以做到!”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值