sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag returnera elementet jag letar efter i en kapslad array?

Använd skalmetoden findAndModify för att passa dina behov.

Men du kan inte använda positionstecknet $ mer än en gång när du projicerar i MongoDb, så du kanske måste hålla reda på det själv på klientsidan.

Använd arrayFilters för att uppdatera djupt kapslade underdokument, istället för positional all operator $[] .

Nedan är en fungerande fråga -

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


  1. Maximal anropsstackstorlek överskrids vid infogning av 10 000 dokument

  2. Flyttar HDFS-data till MongoDB

  3. Hög tillgänglighet (Multi-AZ) för CDP Operational Database

  4. MongoDB:Skrivs bulkoperationer till oploggen som helhet?