database - italiano - text mining teoria e applicazioni




Differenza tra set con{merge: true} e aggiornamento (2)

In Cloud Firestore ci sono tre operazioni di scrittura:

1) aggiungi

2) impostare

3) aggiornamento

Nei documenti dice che usando set(object, {merge: true}) si uniranno gli oggetti con quelli esistenti.

Lo stesso accade quando si utilizza update(object) Quindi qual è la differenza? Sembra strano che Google duplicherà la logica.


Il modo in cui ho capito la differenza:

  • set senza unire sovrascriverà un documento o lo creerà se non esiste ancora

  • set con unione aggiornerà i campi nel documento o lo creerà se non esiste

  • update aggiornerà i campi ma fallirà se il documento non esiste

  • create creerà il documento ma fallirà se il documento esiste già

C'è anche una differenza nel tipo di dati forniti per l' set e l' update .

Per il set devi sempre fornire dati a forma di documento:

set(
  {a: {b: {c: true}}},
  {merge: true}
)

Con l' update è inoltre possibile utilizzare percorsi di campo per l'aggiornamento di valori nidificati:

update({
  'a.b.c': true
})

Un'altra differenza (estendere la risposta di Scarygami) tra "set with merge" e "update", è quando si lavora con valori nidificati.

se hai un documento strutturato in questo modo:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
   }
 }

e vuoi aggiungere {"friend-uid-3" : true}

usando questo:

db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})

comporterà questi dati:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
     "friend-uid-3": true
   }
 }

tuttavia update usando questo:

db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })

comporterà questi dati:

 `{
   "friends": {
     "friend-uid-3": true
   }
 }`






google-cloud-firestore