Im Cloud Firestore gibt es drei Schreibvorgänge:
1) hinzufügen
2) einstellen
3) aktualisieren
In den Dokumenten heißt es, dass mit using set(object, {merge: true})
das Objekt mit dem vorhandenen zusammengeführt wird.
Das gleiche passiert, wenn Sie verwenden. update(object)
Was ist also der Unterschied, wenn überhaupt? Es scheint seltsam, dass Google die Logik dupliziert.
create
Methode in der API gefunden?set
dokumentförmige Daten verarbeitet werden, bei denenupdate
Feldpfad- und Wertepaare verwendet werden. Dies bedeutet, dass Sie Änderungen an tief verschachtelten Werten vornehmen könnenupdate
, die umständlicher sindset
. Zum Beispiel:set({a: {b: {c: true}}}, {merge: true})
vsupdate('a.b.c', true)
.Ein weiterer Unterschied (Erweiterung der Antwort von Scarygami) zwischen "Mit Zusammenführung festlegen" und "Aktualisieren" besteht darin, mit verschachtelten Werten zu arbeiten.
Wenn Sie ein Dokument wie folgt strukturiert haben:
und möchte hinzufügen
{"friend-uid-3" : true}
mit diesem:
db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})
führt zu diesen Daten:
update
Verwenden Sie jedoch Folgendes:db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
führt zu diesen Daten:
quelle
{ merge: true }
die Update-Funktion hat.update
, können Sie die Punktnotation verwenden . Das Überschreibverhalten vonupdate
ist anders, wenn Sie die Punktnotation verwenden / nicht verwenden.Pro Dokument: https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
Mit der Punktnotation können Sie ein einzelnes verschachteltes Feld aktualisieren, ohne ein anderes verschachteltes Feld zu überschreiben. Wenn Sie ein verschachteltes Feld ohne Punktnotation aktualisieren, überschreiben Sie das gesamte Kartenfeld.
Wie oben erwähnt, ersetzt dies die gesamte Freundesstruktur.
Das tut nicht.
quelle