bash - 在 MongoDB 查询中使用 shell 变量

标签 bash mongodb shell mongodb-query zsh

有没有办法在 MongoDB 查询中使用 shell 变量?

我有这个例子:

#!/usr/bin/env bash

mongo --eval "use cdt_db; db.users.update({username:'${USER}'}, {'\$set':{roles:['Admin']}});"

我试过单引号和双引号,我得到这个错误:

MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
2017-10-09T13:53:51.747-0700 E QUERY    [thread1] SyntaxError: missing ; before statement @(shell eval):1:4

最佳答案

从 shell 的角度来看,您的查询没有问题。变量 USER正确扩展并且$$set正确转义以防止 shell 参数扩展。

问题出在你的use <dbname>查询的一部分。根据docs :

You cannot use any shell helper (e.g. use <dbname>, show dbs, etc.) inside the JavaScript file because they are not valid JavaScript.

相反,您可以使用等效的 JavaScript:

db = db.getSiblingDB('<dbname>')

或者,更好的是,通过命令行参数指定数据库的名称:

mongo dbname --eval 'query'

已修复,您的查询如下所示:

mongo cdt_db --eval "db.users.update({username:'${USER}'}, {\$set:{roles:['Admin']}});"

为了方便(减少转义),您有时也可以考虑使用单引号,并连接扩展变量(在双引号下):

mongo cdt_db --eval 'db.users.update({username:"'"${USER}"'"}, {$set:{roles:["Admin"]}});'

关于bash - 在 MongoDB 查询中使用 shell 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654831/

相关文章:

python - 从 Bash 脚本调用 python 脚本

bash - 如何打印文件中包含指定字节偏移量的整行?

c - 使 fopen() 从某个目录打开文件

arrays - 大型 Bash 数组或注销终止

bash - 了解调用命令的 Bash if 语句

bash - Bash 中的 if、elif、else 语句问题

sql - 存储 2 亿个变长字符串导致碎片/表膨胀

mongodb - 计算Mongodb聚合中2个日期之间的天数

node.js - 为什么 mongodb session MongoStore 在 session 结束后不消失?

linux - 使用Openssl读取多个证书