MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongodb:envie o elemento para a matriz aninhada se a condição for atendida


Problema aqui é o seu mal-entendido algumas coisas.

Quando você faz "outerArray.field.innerArray": { $in: [ 1, 3 ] } em sua consulta, você não está recebendo apenas innerArray onde tem 1 ou 3. Você está obtendo documentos onde existem esses arrays.

Então você está consultando todo o documento.

Você precisa usar arrayFilter para atualizar os valores quando o filtro corresponder.

Então, se eu entendi corretamente, a consulta que você deseja é:
db.collection.update(
{}, //Empty object to find all documents
{
  $push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
  "arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})

Exemplo aqui

Observe como o primeiro objeto em update está vazia. Você tem que colocar lá o campo para corresponder ao documento (não o array, o documento).

Se você deseja atualizar apenas um documento, você deve preencher o primeiro objeto (objeto de consulta) com os valores desejados, por exemplo:{"_id": 11} .