我有下面的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:
有人可以帮助我了解如何使用 $ in 查询将外壳程序脚本mongo命令中的逗号分隔字符串传递到.js文件吗?
我在mongo命令中尝试了多个argumnets / fields,但是该如何将多个用逗号分隔的字符串发送到Mongo脚本中的单个参数/字段?
谢谢。