【问题标题】:mongoexport JSON assertion: 10340 Failure parsing JSON stringmongoexport JSON 断言:10340 解析 JSON 字符串失败
【发布时间】:2012-12-20 00:52:16
【问题描述】:

我正在尝试从 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。 请帮忙。

【问题讨论】:

  • 尝试翻转引号。将单引号放在整个查询之外,并在需要引用字符串的地方使用双引号。

标签: json mongodb command-line export


【解决方案1】:

询问了比我更了解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 选项中每个字段名称之间的空格。

【讨论】:

    【解决方案2】:

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

    我的问题是将 _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\")}"
    

    【讨论】:

    • 这是正确的答案,尽管我不需要在整个查询中加上双引号。这对我有用:-q '{_id : ObjectId("5148894d98981be01e000011")}' 所以 ObjectIds 中的单引号似乎是关键。
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多