3

我正在尝试从 mongoDB 导出 CSV 文件列表并将输出文件保存到我的目录,即 /home/asaj/。输出文件应具有以下列:name、file_name、d_start 和 d_end。查询应过滤状态等于“FU”或“FD”且 d_end > 2012 年 12 月 10 日的数据。

在 mongoDB 中,查询工作正常。下面的查询仅限于 1 个数据输出。请参阅下面的查询:

> db.Samples.find({ $or : [ { status : 'FU' }, { status : 'FD'} ], d_end : { $gte : ISODate("2012-12-10T00:00:00.000Z") } }, {_id: 0, name: 1, file_name: 1, d_start: 1, d_end: 1}).limit(1).toArray();
[
    {
            "name" : "sample"
            "file_name" : "sample.jpg",
            "d_end" : ISODate("2012-12-10T05:1:57.879Z"),
            "d_start" : ISODate("2012-12-10T02:31:34.560Z"),
    }

]
>

在 CLI 中,mongoexport 命令如下所示:

mongoexport -d maindb -c Samples -f "name, file_name, d_start, d_end" -q "{'\$or' : [ { 'status' : 'FU' }, { 'status' : 'FD'} ] , 'd_end' : { '\$gte' : ISODate("2012-12-10T00:00:00.000Z") } }" --csv -o "/home/asaj/currentlist.csv"

但我总是以这个错误结束:

connected to: 127.0.0.1
Wed Dec 19 16:58:17 Assertion: 10340:Failure parsing JSON string near: , 'd_end
0x5858b2 0x528cb4 0x52902e 0xa9a631 0xa93e4d 0xa97de2 0x31b441ecdd 0x4fd289
mongoexport(_ZN5mongo11msgassertedEiPKc+0x112) [0x5858b2]
mongoexport(_ZN5mongo8fromjsonEPKcPi+0x444) [0x528cb4]
mongoexport(_ZN5mongo8fromjsonERKSs+0xe) [0x52902e]
mongoexport(_ZN6Export3runEv+0x7b1) [0xa9a631]
mongoexport(_ZN5mongo4Tool4mainEiPPc+0x169d) [0xa93e4d]
mongoexport(main+0x32) [0xa97de2]
/lib64/libc.so.6(__libc_start_main+0xfd) [0x31b441ecdd]
mongoexport(__gxx_personality_v0+0x3c9) [0x4fd289]
assertion: 10340 Failure parsing JSON string near: , 'd_end

我在 mongoexport CLI中的 " , 'd_end' " 中有错误。我不太确定这是否是 JSON 语法错误,因为查询适用于 MongoDB。请帮忙。

4

2 回答 2

2

在询问了比我更了解 MongoDB 的人后,我们发现问题出在

ISODate("2012-12-10T00:00:00.000Z")

我们找到了这个问题的答案:mongoexport JSON parsing error

要解决此错误,首先,我们将其转换为strtotime

php > echo strtotime("12/10/2012");
1355126400

接下来,多个 strtotime 结果为 1000。该日期将如下所示:

1355126400000

最后,在 mongoexport 命令中将 ISODate("2012-12-10T00:00:00.000Z")更改为new Date(1355126400000)

现在,CLI mongoexport 看起来像这样并且它可以工作:

mongoexport -d maindb -c Samples -f "id,file_name,d_start,d_end" -q "{'\$or' : [ { 'status' : 'FU' }, { 'status' : 'FD'} ] , 'd_end' : { '\$gte' : new  Date(1355126400000) } }" --csv -o "/home/asaj/listupdate.csv"

注意:删除 -f 或 --fields 选项中每个字段名称之间的空格。

于 2012-12-20T03:15:15.657 回答
2

我知道这与这个问题没什么关系,但是这篇文章的标题在谷歌中提出了它,所以因为我得到了完全相同的错误,所以我会添加一个答案。希望它可以帮助某人。

我的问题是将 _id 的 MongoId 查询添加到 Windows 上的 mongoexport 控制台命令。这是错误:

Assertion: 10340:Failure parsing JSON string near: _id

问题最终是我需要将 JSON 查询用双引号括起来,并且ObjectId 必须用双引号(不是单引号!),所以我不得不转义这些引号。这是有效的最终查询,以供将来参考:

 mongoexport -u USERNAME -pPASSWORD -d DATABASE -c COLLECTION 
   --query "{_id : ObjectId(\"5148894d98981be01e000011\")}"
于 2013-03-29T16:10:40.603 回答