Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

Bulk.find.arrayFilters()

在此页面上

  • 说明
  • 例子
Bulk.find.arrayFilters(<array of filter documents>)

版本 3.6 中的新增功能

确定对数组字段进行更新操作时要修改哪些数组元素:

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

在更新文档中,使用经过 $[<identifier>]过滤的位置操作符定义一个标识符,然后在大量过滤文档中引用该标识符。 如果更新文档中未包含某个标识符,则无法获得该标识符的大量过滤文档。

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

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

// 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();

提示

另请参阅:

后退

Bulk.find

在此页面上