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

Como posso retornar o elemento que estou procurando dentro de uma matriz aninhada?


Use o método shell findAndModify para atender às suas necessidades.

Mas você não pode usar o caractere posicional $ mais de uma vez durante a projeção no MongoDb, então você pode ter que acompanhá-lo no lado do cliente.

Use arrayFilters para atualizar subdocumentos profundamente aninhados, em vez de todos os operadores posicionais $[] .

Abaixo está uma consulta de trabalho -
var query = {
    universe: 'comics'
};

var update = {
    $set: {
        'saga.$[outer].characters.$[inner].character': 'lobezno',
        'saga.$[outer].characters.$[inner].picture': '618035022354.png',
    }
};

var fields = {
    'saga.characters': 1
};

var updateFilter = {
    arrayFilters: [
        {
            'outer.name': 'x-men'
        },
        {
            'inner.character': 'wolverine'
        }
    ]
};

db.collection.findAndModify({
    query,
    update,
    fields,
    arrayFilters: updateFilter.arrayFilters
    new: true
});