Escribí un script de shell para crear un volcado de datos de registros actualizados ayer usando el comando mongoexport.
yesterday=$(date -d 'yesterday 00:00:00' '+%s'000) today=$(date -d 'today 00:00:00' '+%s'000) query="'{\"updated_at\":{\$gte:new Date(${yesterday}),\$lte:new Date(${today})}}'" echo ${query} mongoexport -h $HOST -d $DOC -c $COL_NAME -u $USER -p $PWD -q ${query} -o $fileName
Después de agregar la consulta, cuando ejecuto el script de shell, aparece el siguiente error en la consola
'{"updated_at":{$gte:new Date(1484287200000),$lte:new Date(1484373600000)}}' too many positional arguments: [Date(1484287200000),$lte:new Date(1484373600000)}}'] try 'mongoexport --help' for more information
Cuando ejecuto esta consulta en la línea de comando, funciona correctamente. ¿Puede alguien decirme por qué es este error cuando se ejecuta en el script de Shell?
Esto funciona en la línea de comandos.
$mongoexport -h <<HOST>> -d <<DOC>> -c <<COL> -u <<UN>> -p <<PWD>> -q '{"updated_at":{"$gte":new Date(1484287200000),"$lte":new Date(1484373600000)}}'
Hay una regla general en bash
: cuando usa una variable, siempre rodéela con comillas dobles. Hay excepciones, pero son raras.
mongoexport -h "$HOST" -d "$DOC" -c "$COL_NAME" -u "$USER" -p "$PWD" -q "${query}" -o "$fileName"
Este código funcionó para mí
yesterday=$(date -d 'yesterday 00:00:00' '+%s'000) today=$(date -d 'today 00:00:00' '+%s'000) query1="{\"transactionDate\":{\$gte: new Date(${yesterday}),\$lte: new Date(${today})}}" echo $yesterday echo $today mongoexport -d databasename-c collectionname --host yourip --port 27017 -p password -u username-q "${query1}" --type=csv --fields=transactionDate,amount > test5.csv