1

我有以下 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 脚本中的单个参数/字段?

提前致谢。

4

0 回答 0