2016-07-13 3 views
3

bong 변수 $i을 mongo 쉘 쿼리에 포함시켜 날짜를 비교하여 데이터를 가져와야합니다.mongodb 쿼리에 embed bash 변수

i=10 
while [ "$i" -lt 12 ]; do 
     mongo $MONGO_DATABASE --eval 'printjson(db.mycollection.find({"created_at":{"$lte":ISODate(2016-04-\"$i\"T09:26:31.190Z)}}).toArray())' > $OUTPUT_DIRECTORY/$FILE_NAME 
done 

위의 구현을주고있다 i: command not found

답변

1

쉘 변수는 작은 따옴표 내에서 확장되지 않습니다. 큰 따옴표 사용 :

mongo "$MONGO_DATABASE" --eval "printjson...ISODate(2016-04-${i}T09:26:31.190Z) 

그러면 평가하려는 문자열에서 큰 따옴표 사용을 이스케이프 처리해야합니다. \"created_at\". 또한 $의 다른 용도를 피할 필요가 있습니다. \$lte.

mongo "$MONGO_DATABASE" --eval 'printjson...ISODate(2016-04-'"$i"'T09:26:31.190Z) 

즉, 다음 작은 따옴표를 다시 열, 작은 따옴표를 닫습니다 (큰 따옴표 안에) 쉘 변수를 연결할 :

또는이 같은 것을 사용 후 전체 명령 주위에 따옴표를 사용하고 있습니다 .