MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann ich das gesuchte Element in einem verschachtelten Array zurückgeben?

Verwenden Sie die Shell-Methode findAndModify an Ihre Bedürfnisse anpassen.

Sie können jedoch nicht das Positionszeichen $ mehr als einmal beim Projizieren in MongoDb, so dass Sie es möglicherweise selbst auf der Client-Seite verfolgen müssen.

Verwenden Sie arrayFilters um tief verschachtelte Unterdokumente zu aktualisieren, anstelle des Positionsoperators $[] .

Unten ist eine funktionierende Abfrage -

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