私は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"}]
}
あなたのプロパティは実際には "arrayfield"という名前になっていますか、実際には何か他のものと呼ばれていますが、ここで実行しようとしている実際のステートメントは書かれていませんか?また、同じクエリで '$ elemMatch'と' 'dot notation 'の両方の形式を使うのは意味がありません。そして、あなたの "実際の"正規表現は、正しい予期された結果を返さない不正確なクエリ構造を除いて、おそらく問題になります。 **これはあなたの**本当の**クエリ式ではなく、抽象的な**です。問題は実際に使用している実際の表現にあります。それはあなたがここに投稿することを気にしなかったことです。 –
@ NeeLunnは、同じクエリで$ elemMatchとドット表記を使用することが理にかなっていない理由を詳しく説明できます。また、mongodb 3.2でも問題なく同じことを実行しました。 "queryfile"オプションを使用してクエリをファイルとして渡しました。そしてmongo 2.6でも同じことをしたいです。 – Akash
あなたの質問は、発行された実際のクエリを表示せずには意味をなさないポイント。問題は '$ elemMatch'が配列上の複数の条件を探していることです。この場合、2つの異なるフィールドの条件になります。まったく同じ配列パスと '$ elemMatch'の"外側 "に"第3 "条件を追加します。これは、他の条件と並行して動作しない可能性があります。 –