我试图遵循本教程: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
为什么呢?我怎样才能做到这一点?
答案 0 :(得分:9)
我在你的方法中发现了几个错误,让我们逐个检查它们。
MongoDB期望date为数字或ISO 8601字符串。
不幸的是,unix date
实用程序没有对此格式的内置支持,因此您应该使用:
d=`date --date="-3 month" -u +"%Y-%m-%dT%H:%M:%SZ"`
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
N.B。在"
电话周围注意./test2.sh
引号。他们告诉bash将./test2.sh
输出视为单个参数,忽略所有内部引号和空格。
答案 1 :(得分:0)
您需要在脚本或命令周围添加返回标记以对其进行评估:
mongoexport --db game_server --collection GameHistory \
-query `/home/dev/test2.sh` --out /home/dev/file.json