Bulk.find.arrayFilters()
Descrição
Bulk.find.arrayFilters(<array of filter documents>)
Determina quais elementos de array modificar para uma operação de atualização em um campo de array:
Bulk.find(<query>).arrayFilters([ <filter1>, ... ]).updateOne(<update>); Bulk.find(<query>).arrayFilters([ <filter1>, ... ]).update(<update>); No documento de upgrade, use o operador posicional filtrado
$[<identifier>]
para definir um identificador, que você então faz referência nos documentos do filtro de matriz. Você não pode ter um documento de filtro de matriz para um identificador se o identificador não estiver incluído no documento de atualização.O
<identifier>
deve começar com uma letra minúscula e conter apenas caracteres alfanuméricos.Você pode incluir o mesmo identificador várias vezes no documento de atualização; entretanto, para cada identificador distinto (
$[identifier]
) no documento de atualização, você deve especificar exatamente um documento de filtro de array correspondente. Ou seja, não é possível especificar vários documentos de filtro de array para o mesmo identificador. Por exemplo, se a instrução de atualização incluir o identificadorx
(possivelmente várias vezes), você não poderá especificar o seguinte paraarrayFilters
que inclui 2 documentos de filtro separados parax
:// INVALID [ { "x.a": { $gt: 85 } }, { "x.b": { $gt: 80 } } ] No entanto, você pode especificar condições compostas no mesmo identificador em um único documento de filtro, como nos exemplos a seguir:
// 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 } } ] Anexar ao método
Bulk.find()
para especificar os filtros de array para as operaçõesupdateOne()
eupdate()
.
Exemplo
var bulk = db.coll.initializeUnorderedBulkOp(); bulk.find({}).arrayFilters( [ { "elem.grade": { $gt: 85 } } ] ).updateOne( { $set: { "grades.$[elem].mean" : 70 } } ); bulk.execute();