当前位置: 首页 > 面试题库 >

mongoexport JSON解析错误

淳于博
2023-03-14
问题内容

尝试对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: [ {

但是Date预先在mongoexport中进行乘法:

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

作品!

为什么mongo在这两种情况下对查询的评估不同?


问题答案:

mongoexport命令行实用程序支持传递查询 JSON
格式,但您要评估 的JavaScript 在您的查询。

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

您应该将JSON表示为“ 结构化数据 ”,将JavaScript表示为“ 可执行代码 ”。因此,实际上,您正在运行的查询有两种不同的上下文。

mongo命令行实用程序是一个交互式的JavaScript壳,其包括JavaScript解释器以及用于与MongoDB的工作一些辅助功能。尽管JavaScript对象格式看起来类似于JSON,但是您也可以使用JavaScript对象,函数调用和运算符。

您的示例1221029382*1000是一个数学运算的结果,如果您在mongo外壳中运行该数学运算,那么该JavaScript解释器将执行该数学运算;在JSON中,它是新日期的无效值,因此mongoexport正在退出,并显示“无法解析JSON字符串”错误。



 类似资料:
  • 问题内容: 我知道这个问题经常被问到,但是找不到合适的解决方案。使用时 要么 我总是会遇到以下错误: 人们建议打开并重试。但这并没有太大帮助。 我也有装的罐子: 问题答案: 从Apache POI常见问题解答: 我可以混合不同版本的POI罐子吗? 否。不支持此功能。 所有使用中的POI罐子必须来自同一版本。不支持诸如poi-3.11.jar和poi- ooxml-3.9.jar之类的组合,它们将无

  • 问题内容: 当我尝试从http://api-v3.deezer.com/1.0/search/album/?q=beethoven&index=2&nb_items=2&output=json使用以下方法获取JSON 时: 我得到: 但是使用http://search.twitter.com/search.json?q=beethoven&callback=?&count=5的JSON 可以正常工

  • 我在日志中收到以下错误消息: 第32行example.php是: 我重新启动了php5-fpm(我使用的是PHP 5.3)、nginx和Ubuntu服务器本身,但运气不好。知道是怎么回事吗?谢谢!

  • 和 是我用来获取JSON并对其进行解析的类。但是当我运行第一个时,它会报告以下堆栈跟踪: 它告诉我添加JsonReader。将lenient(true)设置为我的代码,但我的代码不使用JsonReader。那么如何将setLenient(true)添加到代码中? 编辑:添加API响应(格式化):

  • 我有以下命令。我想循环使用此键和值,即对于冰/冷的项目,打印“值” 我试过这个: 却给我错误

  • 为什么下面的代码返回ValueError?