2017-11-10 4 views
1

私はdoc exampleのようにmongodb 3.6.0-rc3で配列フィルターを使用しようとしていますが、影響を受けた行がなくエラーもありません。Mongodb 3.6.0-rc3アレイフィルターが機能しませんか?

例が簡略化されています。私は位置演算子として$でこれを行うことができますが、私は2つのレベルのネストされた配列に対してこの機能を使うつもりです。

db.getCollection('books').update({}, 
    { 
     $set: { "authors.$[element].firstName": "Joe" } 
    }, 
    { 
     arrayFilters: [ { element: { "_id": ObjectId("some_id") } } ], 
     multi: true 
    }) 

誰でもこれを試しましたか?

+0

質問に答えられていないと思われる回答がありますか?もしそうなら、正確に答えなければならないものを明らかにするために答えにコメントしてください。実際にあなたが質問した質問に答えた場合は、[あなたの回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)に質問してください。ありがとう@NeilLunn。 –

答えて

0

robomongoでこれを入力していますか?それはそれのように見えます!そうなら、それは動作しません。

:私はこれが原因シェルヘルパー・メソッドは、現在実装されている方法の(シェルベースのビルドであるrobomongo)、それに基づいて「古い殻」か何かでは動作しませんと言うUpdating a Nested Array with MongoDBに私のノートを読みます注:これは皮肉なことに、.update()などのオプションの引数で指定されているため、この構文は一般にすべての最新リリースドライバのバージョンと互換性があります。

しかし、mongoシェルではこの方法は実装されていません(後方互換性のために皮肉なことに)。arrayFilters引数は、配信するためにオプションを解析する内部メソッドによって認識されず削除されません以前のMongoDBサーバのバージョンとの "下位互換性"と "従来の" .update() API呼び出し構文。

mongoシェルまたは他の "シェルベースの"製品(特にRobo 3T)でコマンドを使用するには、開発ブランチまたは本番リリースの3.6以降の最新バージョンが必要です。

したがって、リリース候補を再生する場合は、バンドルされたmongoシェルをそのバージョンと一緒に使用するか、標準のドライバでコードを実行します。

+0

お願いします。私はRobo 3T 1.1.1でそれを最初に試してみました。 'パスの作成者の識別子 'element'の配列フィルタが見つかりませんでした。$ [element] .firstName'' MongoDBシェルバージョンv3.6.0- rc3: 'WriteResult({" nMatched ":1、" nUpserted ":0、" nModified ":0})' –

+0

このチュートリアルの後にインストールされたmongo:https://docs.mongodb.com/master/tutorial/install -mongodb-on-ubuntu/ –

+0

@SenadMehicここで英語が問題になるかもしれません。 ** RoboMongo **では動作しません。代わりに['mongo'](https://docs.mongodb.com/getting-started/shell/client/)シェルを使用してください。 [arrayFiltersでMongoDBのネストされたサブ文書を更新する](https://stackoverflow.com/a/47233482/2313887)も参照してください。 'db.version()'をチェックしてください。可能であれば、シェルは更新しましたが、サーバは更新しませんでした。 3.6 rcまたは3.5.12以上の開発リリースでなければなりません –

関連する問題