Bulk.find.arrayFilters()
説明
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()
操作の配列フィルターを指定します。
例
var bulk = db.coll.initializeUnorderedBulkOp(); bulk.find({}).arrayFilters( [ { "elem.grade": { $gt: 85 } } ] ).updateOne( { $set: { "grades.$[elem].mean" : 70 } } ); bulk.execute();