我有以下 mongo 游标逻辑,它将逗号分隔的字符串作为 $in 条件的输入。
student.js
==========
db.getCollection('student').aggregate([
{ $match : { id : {$in: [
'100','101','102']} } }
])
然后我使用以下 bash 脚本将上述查询的结果集转储到 csv 文件中:
student.sh
==========
#!/usr/bin/env bash
IDS_FILE="$1"
auth=""
host="localhost:27017"
while IFS=$'\r' read -r id || [[ -n "$id" ]]; do
echo "id ::" $id
ids=$ids','"'$id'"
ids="${ids}"
done < "${IDS_FILE}"
id="${ids:1}"
echo $id
mongo --quiet ${auth} ${host}/school --eval "var id = $id" student.js >> out.csv
我正在使用下面输入 ids.txt 的命令运行上述脚本文件,
./student.sh ids.txt
这个 ids.txt 包含学生 ID,如下所示。
ids.txt
=======
1
2
3
我在上面提到的 student.sh 文件的这个回显行号中低于 id 的打印,
echo $id
'1','2','3'
这是绝对可以预料的,但是当我试图通过下面的 mongo 命令将这些 $id 值发送到 student.js $in 条件时,我遇到了错误,
mongo --quiet ${auth} ${host}/school --eval "var id = $id" student.js >> out.csv
在上面的 var id = $id id 被替换为'1','2','3'
错误:
E QUERY [js] SyntaxError: missing variable name @(shell eval):1:
谁能帮助我理解如何将逗号分隔的字符串从 shell 脚本 mongo 命令传递到带有$in查询的 .js 文件?
我已经尝试在 mongo 命令中使用多个参数/字段,但如何将多个用逗号分隔的字符串发送到 Mongo 脚本中的单个参数/字段?
提前致谢。