2017-10-06 33 views
7

W chmurze FireStore istnieją trzy operacje zapisu:Różnica pomiędzy zestawem z {scalić: true} i zaktualizuj

1) dodać

2) ustawić

3) aktualizuje

W dokumentach jest napisane, że użycie set(object, {merge: true}) spowoduje połączenie obiektu z istniejącym.

To samo dzieje się, gdy używasz update(object) Więc jaka jest różnica, jeśli w ogóle? Wydaje się dziwne, że Google powiela logikę.

Odpowiedz

14

Sposób Zrozumiałem różnicę:

  • set bez scalenia zastąpi dokument lub go utworzyć, jeśli nie istnieje jeszcze

  • set z seryjnej będzie zaktualizować pola w dokumencie lub utwórz go, jeśli nie istnieje

  • update zaktualizuje pola, ale zawiedzie, jeśli dokument nie istnieje

  • create stworzy dokument, ale nie wtedy, gdy dokument już istnieje

Jest też różnica w rodzaju danych, które dostarczają set i update.

Dla set zawsze musisz dostarczyć dokument w kształcie dane:

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

Z update można również użyć ścieżki terenowe do aktualizacji wartości zagnieżdżone:

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

ale gdzie znalazłeś 'create' metody w API? – ZuzEL

+1

https://cloud.google.com/nodejs/docs/reference/firestore/0.8.x/DocumentReference#create for node.js. Wygląda na to, że webowy interfejs API nie ma tej metody. Nie byłem pewien, na jakiej platformie jesteś :) – Scarygami

+2

Kolejną różnicą, o której możesz wspomnieć, jest to, że 'set' działa na danych w kształcie dokumentu, gdzie' update' pobiera pary pól i wartości. Oznacza to, że możesz dokonać zmian głęboko zagnieżdżonych wartości za pomocą 'update', które są bardziej kłopotliwe w przypadku' set'. Na przykład: 'set ({a: {b: {c: true}}}, {merge: true})' kontra 'update ('a.b.c', true)'. –

8

Kolejna różnica (rozszerzenie odpowiedź Scarygami za) pomiędzy "ustawionym na scalanie" i "aktualizuj" jest podczas pracy z zagnieżdżonymi wartościami.

jeśli dokument skonstruowany tak:

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

i chcesz dodać {"friend-uid-3" : true}

pomocą tego:

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

spowoduje tych danych:

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

jednak update pomocą tego:

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

spowoduje tych danych:

`{ 
    "friends": { 
    "friend-uid-3": true 
    } 
}` 
Powiązane problemy