2017-08-02 37 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