{merge: true}이(가) 포함된 Firestore 세트와 업데이트 간의 차이점
Cloud Firestore에는 세 가지 쓰기 작업이 있습니다.
add()set()update()
문서에는 다음과 같이 나와 있습니다.set(object, { merge: true })지정한 개체를 기존 문서와 병합합니다.
사용할 때도 마찬가지입니다.update(object)그래서 무엇이 다른가요?구글이 이런 기능을 복제한다는 것은 이상해 보입니다.
차이를 이해하는 방법:
set없이.merge문서가 아직 존재하지 않으면 문서를 덮어쓰거나 문서를 만듭니다.set와 함께merge문서의 필드를 업데이트하거나 문서가 없는 경우 필드를 작성합니다.update필드를 업데이트하지만 문서가 존재하지 않으면 실패합니다.create문서를 만들지만 문서가 이미 존재하는 경우 실패합니다.
제공하는 데이터의 종류에도 차이가 있습니다.set그리고.update.
위해서set항상 문서 모양의 데이터를 제공해야 합니다.
set(
{a: {b: {c: true}}},
{merge: true}
)
와 함께update필드 경로를 사용하여 중첩 값을 업데이트할 수도 있습니다.
update({
'a.b.c': true
})
" 병합으로 설정"과 "업데이트" 사이의 또 다른 차이점은 중첩된 값으로 작업할 때입니다.
다음과 같이 구성된 문서가 있는 경우:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
}
}
그리고 추가하고 싶습니다.{"friend-uid-3" : true}
사용:
db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})
다음과 같은 데이터가 생성됩니다.
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
"friend-uid-3": true
}
}
하지만update사용:
db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
다음과 같은 데이터가 생성됩니다.
`{
"friends": {
"friend-uid-3": true
}
}`
문서별: https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
점 표기법을 사용하면 다른 중첩 필드를 덮어쓰지 않고 단일 중첩 필드를 업데이트할 수 있습니다.점 표기 없이 중첩된 필드를 업데이트하면 전체 맵 필드를 덮어씁니다.
위에서 언급한 것처럼, 이것은 전체 친구 구조를 대체합니다.
db.collection('users').doc('random-id').update({
"friends": {
"friend-uid-3": true
}
})
그렇지 않습니다.
db.collection('users').doc('random-id').update({
"friends.friend-uid-3": true
})
지도에서 중첩된 필드를 삭제하려면 위의 답변에 추가하여 사용할 수 있습니다.update또는set사용 사례에 따라 다릅니다.
다음으로 시작하고 다음 이외의 모든 프로필 항목을 제거하려면"user1"그러면 두 가지 옵션이 있습니다.
{
"users": {
"profiles": {
"user1": ...,
"user2": ...
}
}
갱신하다
덮어씁니다.profiles무엇이 제공되든 간에
update({
'users.profiles': { 'user1': ... }
})
세트
이렇게 하면 삭제된 내용이 기존 프로필에 병합되어 삭제되지 않은 내용이 남습니다.
set({
users: {
profiles: {
'user2': FieldValue.delete(),
'user3': FieldValue.delete(),
...
}
}
}, { merge: true })
이는 에만 적용됩니다.Map둘 다set그리고.update와 같은 어레이 관련 연산자를 명시적으로 사용하지 않으면 어레이를 덮어씁니다.
무서운 가미 답은 파이어베이스 버전 9에도 적용됩니다.작은 변경 사항은 다음과 같이 고려해야 합니다.
- 사용하다
setDoc에set를 들어, 예들어대를 하는 대신에 사하는신용을 합니다.db.collection('users').doc('random-id').set({ 'admin': true });,사용하다setDoc(doc(db, 'users', 'random-id'), { "admin": true }) - 사용하다
updateDoc에update를 들어, 예들어대를 하는 대신에 사하는신용을 합니다.db.collection('users').doc( random-id').update({"age": 27}),사용하다await updateDoc(doc(db, 'users', 'random-id'), { "age": 27})
언급URL : https://stackoverflow.com/questions/46597327/difference-between-firestore-set-with-merge-true-and-update
'source' 카테고리의 다른 글
| SQL*Plus에서 "2"는 무엇을 의미합니까? (0) | 2023.06.26 |
|---|---|
| 스프링 부팅이 시작될 때마다 ElasticSearch 상태 검사가 실패함 (0) | 2023.06.26 |
| Linux 셸 스크립트에서 입력을 예/아니오/취소하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
| 오류: 모듈 '@angular/material'에 내보낸 멤버 "..."이 없습니다. (0) | 2023.06.26 |
| Angular - 여러 HTTP 호출을 순차적으로 수행합니다. (0) | 2023.06.26 |