2017-08-02 6 views
0

私はmongodb 2.6を使用しており、クエリオプションを使用してダンプを作成しようとすると "--query引数を使用してmongodumpが "位置引数が許可されていません"エラーを返します

パラメータのタイムスタンプが指定された範囲内で、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'と' 'dot notation 'の両方の形式を使うのは意味がありません。そして、あなたの "実際の"正規表現は、正しい予期された結果を返さない不正確なクエリ構造を除いて、おそらく問題になります。 **これはあなたの**本当の**クエリ式ではなく、抽象的な**です。問題は実際に使用している実際の表現にあります。それはあなたがここに投稿することを気にしなかったことです。 –

+0

@ NeeLunnは、同じクエリで$ elemMatchとドット表記を使用することが理にかなっていない理由を詳しく説明できます。また、mongodb 3.2でも問題なく同じことを実行しました。 "queryfile"オプションを使用してクエリをファイルとして渡しました。そしてmongo 2.6でも同じことをしたいです。 – Akash

+0

あなたの質問は、発行された実際のクエリを表示せずには意味をなさないポイント。問題は '$ elemMatch'が配列上の複数の条件を探していることです。この場合、2つの異なるフィールドの条件になります。まったく同じ配列パスと '$ elemMatch'の"外側 "に"第3 "条件を追加します。これは、他の条件と並行して動作しない可能性があります。 –

答えて

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

関連する問題