sql >> Database >  >> NoSQL >> MongoDB

Geneste arrays bijwerken in mongodb

Dit is de grote vraag, moet je gebruik maken van Mongo's "addToSet" en "push" operaties? Als je echt van plan bent om alleen individuele items in de array te wijzigen, dan zou je deze arrays waarschijnlijk als objecten moeten bouwen.

Hier is hoe ik dit zou structureren:

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

Dit transformeert in feite alles in JSON-objecten in plaats van arrays. U verliest de mogelijkheid om $push te gebruiken en $addToSet maar ik denk dat dit alles makkelijker maakt. Uw zoekopdracht ziet er bijvoorbeeld als volgt uit:

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

Je zult ook merken dat ik de "ID's" heb gedumpt. Als je dit soort dingen nest, kun je 'ID' over het algemeen vervangen door dat nummer gewoon als index te gebruiken. Het "ID"-concept wordt nu geïmpliceerd.

Deze functie is toegevoegd in 3.6 met expressieve updates.

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



  1. mongodb.conf bind_ip =127.0.0.1 werkt niet maar 0.0.0.0 werkt

  2. Hoe verbinding maken met een externe Redis-server?

  3. Spring Redis-fouthandvat

  4. Hoe spoel ik redis db van python redis?