2

我正在尝试遵循本教程: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

为什么?我怎样才能使这项工作?

4

2 回答 2

11

我在您的方法中发现了几个错误,让我们一一检查。

日期格式

MongoDB 期望日期是一个数字或ISO 8601字符串。

不幸的是,unixdate实用程序没有对这种格式的内置支持,因此您应该使用:

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

使用扩展 JSON

JSON 规范不支持日期,因此您应该使用MongoDB 扩展 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脚本。因此,当您将文件路径传递给 时--querymongoexport期望它是一个 JSON 文件。

要修复它,您应该执行test2.sh自己并将结果字符串传递给mongoexport

mongoexport --db game_server --collection GameHistory \
  --query "`./test2.sh`" --out ./test2.json

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

于 2014-08-12T09:01:15.863 回答
0

您需要在脚本或命令周围添加反引号以对其进行评估:

 mongoexport --db game_server --collection GameHistory \
 -query `/home/dev/test2.sh` --out /home/dev/file.json
于 2014-08-12T08:38:04.550 回答