对于ISODate,使用带有--query的mongoexport

Cha*_*fot 8 mongodb mongodb-query mongoexport

我有这个查询,但我得到一个语法错误:意外的标识符

mongoexport --db ium --collection events \
  --query 'db.events.find({'created_at' : {
      $gte: ISODate("2016-03-01T00:00:00.001Z"),
      $lte: ISODate("2016-03-29T23:59:59:59.000Z")
    }, 
    "name" : "UPDATE_SUCCESS"})' \
 --out guille1_test.json
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

Bla*_*ven 10

您需要在使用mongoexport的查询中使用"extended json".因此,指定"日期"的方式是$date相反的.而这--query只是JSON格式的"查询字符串".不是整个命令进入shell:

mongoexport --db ium --collection events \
  --query '{ 
    "created_at": { 
      "$gte": { "$date": "2016-03-01T00:00:00.001Z" },
      "$lte": { "$date": "2016-03-29T23:59:59.000Z" }
    },
    "name": "UPDATE_SUCCESS"
  }' \
  --out guile1_test.json
Run Code Online (Sandbox Code Playgroud)

还要注意$lte参数中更正的日期字符串,当然还有''JSON参数主体和""内部表达式和值周围的"引用"用法.IT方面重要的是,这些类型的报价都不同,以及"壳论据"应该有自己的"外"的报价为'',否则"壳"尝试计算表达式包含了.


spi*_*lio 5

另一个可行的解决方案是使用MongoDB手册中new Date()描述的构造函数。这将导致较小的查询正文足迹,如下所示:

    mongoexport --db ium --collection events \
  --query '{ 
    "created_at": { 
      "$gte": new Date("2016-03-01T00:00:00.001Z"),
      "$lte": new Date("2016-03-29T23:59:59.000Z")
    },
    "name": "UPDATE_SUCCESS"
  }' \
  --out guile1_test.json
Run Code Online (Sandbox Code Playgroud)

这种方法为我提供了开箱即用的方法,而其他所有方法都失败了。没有描述这种方法相对文章在这里

  • 使用 `mongoexport` r4.2.3,我得到“失败:将查询解析为扩展 JSON 时出错:无效的 JSON 文字。位置:XX,文字:新”。接受的答案,即 `"$gte": { "$date": "..." }` 确实有效。 (2认同)