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

Opdatering af indlejrede arrays i mongodb

Her er det store spørgsmål, skal du udnytte Mongos "addToSet" og "push" operationer? Hvis du virkelig planlægger kun at ændre individuelle elementer i arrayet, bør du sandsynligvis bygge disse arrays som objekter.

Sådan vil jeg strukturere dette:

{
    id: 1,
    items: 
        { 
          "2" : { "blocks" : { "3" : { txt : 'hello' } } },
          "5" : { "blocks" : { "1" : { txt : 'foo'}, "2" : { txt : 'bar'} } }
        }
}

Dette transformerer dybest set alt til JSON-objekter i stedet for arrays. Du mister muligheden for at bruge $push og $addToSet men jeg tror det gør alting nemmere. For eksempel vil din forespørgsel se sådan ud:

db.objects.update({'items.2':{$exists:true} }, {'$set':{'items.2.blocks.0.txt':'hej'}})

Du vil også bemærke, at jeg har dumpet "ID'erne". Når du indlejrer ting som dette, kan du generelt erstatte "ID" med blot at bruge det nummer som et indeks. "ID"-konceptet er nu underforstået.

Denne funktion er blevet tilføjet i 3.6 med udtryksfulde opdateringer.

db.objects.update( {id:1 }, { $set:{ 'items.$[itm].blocks.$[blk].txt':"hej", } }, { multi:false, arrayFilters:[ { 'itm.id':2 }, { 'blk.id':3} ] } )



  1. PHP kan ikke finde MongoDB-driveren

  2. Pub/sub implementering i nodeJS

  3. Hvor står mongodb i CAP-sætningen?

  4. Hvordan kan jeg hoste min egen Parse Server på Heroku ved hjælp af MongoDB?