2017-10-06 38 views
7

Trong Mây FireStore có ba ghi hoạt động:Sự khác nhau giữa bộ với {sáp nhập: true} và cập nhật

1) thêm

2) thiết lập

3) cập nhật

Trong tài liệu nói rằng việc sử dụng set(object, {merge: true}) sẽ hợp nhất đối tượng với đối tượng hiện có.

Điều tương tự cũng xảy ra khi bạn sử dụng update(object) Vậy sự khác biệt là gì nếu có? Có vẻ lạ rằng google sẽ lặp lại logic.

Trả lời

14

Con đường tôi hiểu sự khác biệt:

  • set mà không hợp nhất sẽ ghi đè lên một tài liệu hoặc tạo ra nó nếu nó không tồn tại được nêu

  • set với merge sẽ cập nhật các trường trong tài liệu hay tạo nó nếu nó không tồn tại

  • update sẽ cập nhật các trường nhưng sẽ thất bại nếu tài liệu không tồn tại

  • create sẽ tạo ra các tài liệu nhưng thất bại nếu các tài liệu đã tồn tại

Ngoài ra còn có một sự khác biệt trong các loại dữ liệu bạn cung cấp cho setupdate.

Đối set bạn luôn phải cung cấp dữ liệu tài liệu hình:

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

Với update bạn cũng có thể sử dụng đường dẫn hiện trường để cập nhật giá trị lồng nhau:

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

nhưng nơi đã tìm thấy bạn 'phương pháp create' trong API? – ZuzEL

+1

https://cloud.google.com/nodejs/docs/reference/firestore/0.8.x/DocumentReference#create cho node.js. Có vẻ như API web không có phương thức đó. Không chắc chắn bạn đang ở trên nền tảng nào :) – Scarygami

+2

Một sự khác biệt mà bạn có thể đề cập đến là 'tập' hoạt động trên dữ liệu hình tài liệu, trong đó' update' lấy cặp đường dẫn và giá trị trường. Điều này có nghĩa là bạn có thể thực hiện các thay đổi đối với các giá trị lồng nhau sâu sắc với 'update' có nhiều cồng kềnh hơn với' set'. Ví dụ: 'set ({a: {b: {c: true}}}, {merge: true})' vs 'update ('a.b.c', true)'. –

8

khác biệt nữa (mở rộng câu trả lời Scarygami của) giữa "set with merge" và "update", là khi làm việc với một giá trị lồng nhau.

nếu bạn có một tài liệu có cấu trúc như thế này:

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

và muốn thêm {"friend-uid-3" : true}

sử dụng này:

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

sẽ dẫn đến dữ liệu này:

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

tuy nhiên update sử dụng này:

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

sẽ dẫn đến dữ liệu này:

`{ 
    "friends": { 
    "friend-uid-3": true 
    } 
}` 
Các vấn đề liên quan