我正试图遵循本教程:http://www.ultrabug.fr/tag/mongoexport/
并使用sh文件作为查询行。
这是我的文件:

#!/bin/bash
d=`date --date="-3 month"`
echo "{ timeCreated: { "\$lte": $d} }"

这是我的MongoExport线路:
 mongoexport --db game_server --collection GameHistory -query /home/dev/test2.sh --out /home/dev/file.json

我不断得到:
assertion: 16619 code FailedToParse: FailedToParse: Expecting '{': offset:0 of:/home/dev/test2.sh

为什么?我该怎么做?

最佳答案

我在你的方法中发现了几个错误,让我们逐一检查一下。
日期格式
MongoDB期望日期为数字或ISO 8601字符串。
不幸的是,unixdate实用程序没有对这种格式的内置支持,因此您应该使用:

d=`date --date="-3 month" -u +"%Y-%m-%dT%H:%M:%SZ"`

使用扩展json
json规范不支持日期,因此应该使用MongoDB extended JSON。所以,您的最终查询应该如下所示:
{ "timeCreated": { "$lte": { "$date": "2014-05-12T08:53:29Z" } } }

test.sh输出
你把引号弄乱了。下面是一个脚本示例,输出正确的json:
#!/bin/bash
d=`date --date="-3 month" -u +"%Y-%m-%dT%H:%M:%SZ"`
echo '{ "timeCreated": { "$lte": { "$date": "'$d'" } } }'

将查询传递到mongoexport
mongoexport希望--query是一个json字符串,而不是.sh脚本。因此,当您将文件路径传递给--query时,mongoexport希望它是一个json文件。
要修复它,您应该自己执行test2.sh,并将结果字符串传递给mongoexport
mongoexport --db game_server --collection GameHistory \
  --query "`./test2.sh`" --out ./test2.json

注意"呼叫周围的引号。他们告诉bash将./test2.sh输出视为单个参数,忽略所有内部引号和空白。

关于mongodb - 如何将mongoexport与查询脚本文件一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25258803/

10-09 20:43