sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo puedo devolver el elemento que estoy buscando dentro de una matriz anidada?

Use el método de shell findAndModify para satisfacer sus necesidades.

Pero no puede usar el carácter posicional $ más de una vez mientras se proyecta en MongoDb, por lo que es posible que deba realizar un seguimiento en el lado del cliente.

Use arrayFilters para actualizar el subdocumento profundamente anidado, en lugar del operador posicional all $[] .

A continuación se muestra una consulta de trabajo -

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
});