Aggiornamento di matrici annidate in mongodb

Ho un documento in mongodb con array di oggetti di livello nidificato a 2 livelli che devo aggiornare, qualcosa del genere:

{ id: 1, items: [ { id: 2, blocks: [ { id: 3 txt: 'hello' } ] } ] } 

Se esistesse solo un array di livello singolo potrei usare l’operatore posizionale per aggiornare gli oggetti in esso, ma per il secondo livello l’unica opzione che ho trovato è quella di usare l’operatore posizionale con l’indice dell’object annidato, come questo:

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

Questo approccio funziona ma a me sembra pericoloso dato che sto creando un servizio web e il numero di indice dovrebbe provenire dal client che può inviare 100000 come indice e questo costringerà mongodb a creare un array con 100000 indici con valore null.

Esistono altri modi per aggiornare tali oggetti nidificati in cui posso fare riferimento all’ID dell’object anziché alla sua posizione o forse modi per verificare se l’indice fornito è fuori limite prima di utilizzarlo nella query?