Bulk.find.arrayFilters()

在本页面

Description

确定要为数组字段上的更新操作修改哪些数组元素:

Bulk.find(<query>).arrayFilters([ <filter1>, ... ]).updateOne(<update>);
Bulk.find(<query>).arrayFilters([ <filter1>, ... ]).update(<update>);

在更新文档中,使用$[<identifier>]过滤的位置运算符定义标识符,然后在数组过滤器文档中引用该标识符。如果更新文档中未包含标识符,则不能具有数组过滤器文档作为标识符。

Note

<identifier>必须以小写字母开头,并且只能包含字母数字字符。

您可以在更新文档中多次包含相同的标识符;但是,对于更新文档中的每个唯一标识符($[identifier]),您必须指定**完全对应的数组过滤器文档。即,您不能为同一标识符指定多个数组过滤器文档。例如,如果更新语句包含标识符x(可能多次),则不能为arrayFilters指定以下内容,其中包括x的 2 个单独的过滤器文档:

[
  { "x.a": { $gt: 85 } },
  { "x.b": { $gt: 80 } }
]

但是,您可以在单个过滤器文档中的同一标识符上指定复合条件,例如以下示例:

[
  { $or: [{"x.a": {$gt: 85}}, {"x.b": {$gt: 80}}] }
]

[
  { $and: [{"x.a": {$gt: 85}}, {"x.b": {$gt: 80}}] }
]

[
  { "x.a": { $gt: 85 }, "x.b": { $gt: 80 } }
]

附加到Bulk.find()方法,以指定updateOne()update()操作的数组过滤器。

Example

var bulk = db.coll.initializeUnorderedBulkOp();
bulk.find({}).arrayFilters( [ { "elem.grade": { $gt: 85 } } ] ).updateOne( { $set: { "grades.$[elem].mean" : 70 } } );
bulk.execute();
首页