説明
Bulk.find.arrayFilters(<array of filter documents>)配列フィールドのアップデート操作でどの配列要素を変更するかを決定します。
Bulk.find(<query>).arrayFilters([ <filter1>, ... ]).updateOne(<update>); Bulk.find(<query>).arrayFilters([ <filter1>, ... ]).update(<update>); アップデート ドキュメントでは、
$[<identifier>]フィルター処理された位置演算子を使用して識別子を定義し、配列フィルター ドキュメントで参照します。識別子がアップデートドキュメントに含まれていない場合、識別子の配列フィルタードキュメントを作成することはできません。<identifier>は小文字で始まり、含めることができるのは英数字のみです。アップデート ドキュメントには同じ識別子を複数回含めることができます。ただし、アップデート ドキュメント内の個別の識別子 (
$[identifier]) それぞれに対し、対応する配列フィルター ドキュメントを 1 つだけ指定する必要があります。つまり、同じ識別子に対して複数の配列フィルター ドキュメントを指定することはできません。たとえば、アップデート ステートメントに識別子xが(場合によっては複数回)含まれている場合、xに 2 つの個別のフィルタ ドキュメントを含むarrayFiltersに対して、次のように指定することはできません。// INVALID [ { "x.a": { $gt: 85 } }, { "x.b": { $gt: 80 } } ] ただし、次の例のように、単一のフィルター ドキュメント内の同じ識別子に複合条件を指定できます。
// Example 1 [ { $or: [{"x.a": {$gt: 85}}, {"x.b": {$gt: 80}}] } ] // Example 2 [ { $and: [{"x.a": {$gt: 85}}, {"x.b": {$gt: 80}}] } ] // Example 3 [ { "x.a": { $gt: 85 }, "x.b": { $gt: 80 } } ] Bulk.find()メソッドに追加して、updateOne()操作とupdate()操作の配列フィルターを指定します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
注意
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
例
var bulk = db.coll.initializeUnorderedBulkOp(); bulk.find({}).arrayFilters( [ { "elem.grade": { $gt: 85 } } ] ).updateOne( { $set: { "grades.$[elem].mean" : 70 } } ); bulk.execute();