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

Aggiornamento di un record profondo in MongoDb

Il problema è che non puoi usare $ per mostrare la corrispondenza a livelli nidificati in una matrice. E, soprattutto, puoi specificare solo una volta.

Come affermato dalla documentazione , è che il $ sarà solo corrisponde al primo elemento trovato. Questo non è solo significa che se avessi più corrispondenze per la tua query, verrebbe selezionata solo la prima, significa anche che solo il primo abbinamento verrà utilizzata la posizione dell'array. Ciò significa che anche qualcosa del genere non funzionerebbe:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Poiché ciò corrisponderebbe erroneamente all'index 1 valorizza e aggiorna un articolo che non ti aspettavi.

Se potessi aggiornare il intero array quindi funzionerebbe quanto segue:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Questo è come ho detto, perché l'index corrisponde per il primo matrice.

Ma data la struttura che hai, sembrerebbe che la tua opzione migliore sia cambiare quella matrice di livello superiore in modo che sia invece un documento secondario. A meno che in realtà questo non abbia una ragione per essere un array, piuttosto che i due tipi di documenti misti che sembra essere ora.