MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso restituire l'elemento che sto cercando all'interno di un array nidificato?

Usa il metodo della shell findAndModify per soddisfare le tue esigenze.

Ma non puoi usare il carattere posizionale $ più di una volta durante la proiezione in MongoDb, quindi potrebbe essere necessario tenerne traccia da soli sul lato client.

Usa arrayFilters per aggiornare il documento secondario profondamente nidificato, invece dell'operatore posizionale all $[] .

Di seguito è una query funzionante -

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