1

$in 条件の入力としてカンマ区切りの文字列を使用する以下の mongo カーソル ロジックがあります。

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'

これは絶対に予想されることですが、これらの $id 値を以下の mongo コマンドを介して $in 条件で Student.js に送信しようとすると、以下のエラーが発生します。

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コマンドで複数の引数/フィールドを試しましたが、コンマで区切られた複数の文字列をMongoスクリプトの1つの引数/フィールドに送信する方法は?

前もって感謝します。

4

0 に答える 0