2017-08-02 203 views
0

我使用的是mongodb 2.6并试图使用查询选项创建转储给出“位置参数不允许”。mongodump使用--query参数给出“位置参数不允许”错误

我想获得所有参数的时间戳在指定范围之间,其ID是任何指定格式的产品。

mongodump --host 10.xx.xxx.xx:xxxx --db test --collection products --username abc --password uvw --query '{"parameterList":{$elemMatch:{ "paramName":"TimeStamp","paramValue":{$gte:"20160620000000",$lt:"20160724000000"}}},"parameterList.paramValue": {$in:[/SPC126/,/CSC234/]}}' --authenticationDatabase test --out "c:\New folder\dump" 

文档结构

{ 
    "_id": ObjectId("590074c362f41f15144996fa"), 
    "product": "device1", 
    "parameterList":[{"paramName":"TimeStamp", 
        "paramValue":"20160731000700"}, 
        {"paramName":"Id", 
        "paramValue": "SPC126332"}] 
    } 
+0

所以你的属性实际上被命名为'“arrayfield”'或者它们实际上是否调用了别的东西,而且你没有写出你正试图在这里执行的实际语句?在同一查询中使用'$ elemMatch'和“点符号”形式也没有意义。除了不正确的查询结构不会返回正确的预期结果之外,您的“实际”正则表达式可能是一个问题。简而言之,**这是一个抽象的**,而不是你的**真实的**查询表达式。问题在于你真正使用的实际表达。你没有打扰张贴在这里。 –

+0

@NeilLunn可以详细说明为什么在相同的查询中使用$ elemMatch和点符号没有意义。而且我在mongodb 3.2中执行同样的事情没有任何问题使用“查询文件”选项传递查询作为一个文件,我想在mongo上做同样的事情2.6 – Akash

+0

你的问题没有任何意义,没有显示发出的实际查询更多点。问题是'$ elemMatch'正在寻找数组上的多个条件,在这种情况下,条件在两个不同的字段上。您在完全相同的数组路径和“$ elemMatch”的“外部”添加了“第三个”条件。这不符合其他条件,因为这可能是意图。 –

回答

0

不像UNIX bash时,Windows cmd.exe不承认单引号作为分隔符。

运行你的例子命令,在cmd.exe给出了错误:

Error parsing command line: too many positional options 

围绕尝试改变你的报价,加上双引号,反之亦然替换单引号。例如,使用示例命令你贴:

mongodump --host 10.xx.xxx.xx:xxxx --db test --collection products --username abc --password uvw --query "{'parameterList':{$elemMatch:{ 'paramName':'TimeStamp','paramValue':{$gte:'20160620000000',$lt:'20160724000000'}}},'parameterList.paramValue': {$in:[/SPC126/,/CSC234/]}}" --authenticationDatabase test --out "c:\New folder\dump" 

注意--query "...",而不是在上面的例子--query '...'

它应该能够成功完成转储。

+0

感谢Kevin Adistambha,在将查询封入双引号和字段并将其值用单引号括起来后得到了这个工作 – Akash