mongoexport JSON解析错误

时间:2011-11-11 18:15:11

标签: json mongodb command-line export

尝试使用mongoexport查询会导致错误。但是同样的查询由mongo-client评估而没有错误。

在mongo-client中:

db.listing.find({"created_at":new Date(1221029382*1000)})

使用mongoexport:

mongoexport -d event -c listing -q '{"created_at":new Date(1221029382*1000)}'

生成的错误:

Fri Nov 11 17:44:08 Assertion: 10340:Failure parsing JSON string near: 
$and: [ { 
0x584102 0x528454 0x5287ce 0xa94ad1 0xa8e2ed 0xa92282 0x7fbd056a61c4 
0x4fca29 
mongoexport(_ZN5mongo11msgassertedEiPKc+0x112) [0x584102] 
mongoexport(_ZN5mongo8fromjsonEPKcPi+0x444) [0x528454] 
mongoexport(_ZN5mongo8fromjsonERKSs+0xe) [0x5287ce] 
mongoexport(_ZN6Export3runEv+0x7b1) [0xa94ad1] 
mongoexport(_ZN5mongo4Tool4mainEiPPc+0x169d) [0xa8e2ed] 
mongoexport(main+0x32) [0xa92282] 
/lib/libc.so.6(__libc_start_main+0xf4) [0x7fbd056a61c4] 
mongoexport(__gxx_personality_v0+0x3d9) [0x4fca29] 
assertion: 10340 Failure parsing JSON string near: $and: [ {

但事先在mongoexport中进行Date的乘法运算:

mongoexport -d event -c listing -q '{"created_at":new Date(1221029382000)}'

作品!

为什么mongo在这两个上下文中以不同方式评估查询?

2 个答案:

答案 0 :(得分:8)

mongoexport命令行实用程序支持以 JSON 格式传递查询,但您正在尝试评估 JavaScript 在你的查询中。

JSON格式最初源自JavaScript的对象表示法,但JSON文档的内容可以在JavaScript解释器中进行eval()解析。

您应该将JSON视为“结构化数据”,并将JavaScript视为“可执行代码”。事实上,对于您正在运行的查询,有两种不同的上下文。

mongo命令行实用程序是interactive JavaScript shell,它包含一个JavaScript解释器以及一些用于处理MongoDB的帮助程序函数。虽然JavaScript对象格式与JSON类似,但您也可以使用JavaScript对象,函数调用和运算符。

1221029382*1000的示例是数学运算的结果,如果您在mongo shell中运行它,它将由JavaScript解释器执行;在JSON中,它是新Date的无效值,因此mongoexport以“解析JSON字符串失败”错误退出。

答案 1 :(得分:0)

我在执行mongoexport时也遇到此错误,但原因不同。我会在这里分享我的解决方案,因为我在试图解决我的问题时最终在这个SO页面上。

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

我试图在Windows控制台中执行MongoId _id查询。问题是我需要在 double 引号中包装JSON查询,而ObjectId 必须是双引号(不是单引号!)。所以我不得不逃避ObjectId引用。

mongoexport -u USERNAME -pPASSWORD -d DATABASE -c COLLECTION    --query“{_ id:ObjectId(\”5148894d98981be01e000011 \“)}”

如果我在Windows上用单引号包装JSON查询,我会收到此错误:

ERROR: too many positional options

如果我在ObjectId周围使用单引号,我会收到此错误:

Assertion: 10340:Failure parsing JSON string near: _id

所以,是的。祝你好运。