MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment puis-je renvoyer l'élément que je recherche dans un tableau imbriqué ?

Utilisez la méthode shell findAndModify selon vos besoins.

Mais vous ne pouvez pas utiliser le caractère positionnel $ plusieurs fois lors de la projection dans MongoDb, vous devrez donc peut-être en garder une trace vous-même côté client.

Utilisez arrayFilters pour mettre à jour un sous-document profondément imbriqué, au lieu de positionner tout l'opérateur $[] .

Ci-dessous une requête de travail -

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