以下是文件的结构:
{
"_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
的反斜杠除外)在mongo
shell中工作正常。我做错了什么?
P.S。 MongoDB的版本是2.4.6
答案 0 :(得分: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
构造函数的三个参数形式,也不喜欢MongoDB通常用于日期和ISODate
函数的Assertion: 10340:Failure parsing JSON string near: timestamp
函数时间戳。我得到令人困惑的断言失败,如:
{{1}}
当我尝试其中任何一个时。这对我来说非常令人费解,但有时候,一旦找到可行的解决方案,就会悄悄地走开。
答案 1 :(得分:0)
在我的情况下问题是使用不同版本的mongodb。
问题
当我尝试从3.0版本恢复2.4 mongodb版本备份时发生16619 code FailedToParse:FailedToParse:值中的错误字符:offset
。