5

以下是文件的结构:

{
  "_id" : ObjectId("4fccd39c9d8597a034d183b1"),
  "image" : "23ef514f8201320c2d7253e4bf28edf6",
  "owner" : "1b8c335c902ac4ab128ee8ed773bee04",
  "pageviews" : 57,
  "source" : "b1b3849b472edada1b922c786df5b46f",
  "timestamp" : ISODate("2012-06-04T00:00:00Z")
}

我正在执行以下mongodump查询以转储timestamp大于 2013 年 11 月 1 日的所有文档:

mongodump -d dbname -c coll_name -q "{source: "7e04f65e47ed3ddfeb21716a247e3fa6", timestamp: {\$gte: new Date(2013, 10, 1)}}"

它显示:

assertion: 16619 code FailedToParse: FailedToParse: Expecting '}' or ',': offset:13

即使相同的查询对象(除了用于转义的反斜杠$gte)在mongoshell 中也可以正常工作。我究竟做错了什么?

PS MongoDB的版本是2.4.6

4

2 回答 2

14

您的嵌套引号有问题:

mongodump -d dbname -c coll_name -q "{source: "7e04f65e47ed3ddfeb21716a247e3fa6", timestamp: {\$gte: new Date(2013, 10, 1)}}"
# ----------------------------------^---------^

我会在外面使用单引号:

mongodump -d dbname -c coll_name -q '{source: "7e04f65e47ed3ddfeb21716a247e3fa6", timestamp: {$gte: new Date(2013, 10, 1)}}'

这也可以让你避免逃避$gte。如果它不喜欢,new Date那么你可以使用:

{$gte: new Date(1383264000000)}

对于后代,-q解析器似乎不喜欢Date构造函数的三参数形式,也不喜欢ISODateMongoDB 通常用于日期和时间戳的函数。我得到令人困惑的断言失败,例如:

Assertion: 10340:Failure parsing JSON string near: timestamp

当我尝试其中任何一个时。这对我来说非常令人费解,但有时最好在找到可行的解决方案后安静地走开。

于 2013-11-06T06:49:12.190 回答
0

就我而言,问题出在不同版本的 mongodb 上。

问题

16619 代码 FailedToParse:FailedToParse:值中的错误字符:偏移量

当我尝试从 3.0 版本恢复 2.4 mongodb 版本备份时发生。

于 2015-06-10T17:08:31.550 回答