programing

Firestore 하나의 필드만 업데이트

padding 2023. 7. 2. 19:06
반응형

Firestore 하나의 필드만 업데이트

데이터베이스가 있습니다.순서는 컬렉션 - 문서 - 해시 맵입니다.예:

users - 컬렉션의 이름

users.uid - 문서의 이름

문서의 해시맵은 많은 해시맵 사용자 데이터로 구성되어 있습니다. 해시맵

해시맵: 사용자의 이름이 키이고 전화, 위치 등이 값입니다.하나의 사용자 이름에 대해 하나의 필드(위치)만 업데이트해야 하는데 어떻게 하는지 이해할 수 없습니까?

다음 방법을 시도했습니다(알렉스의 전화번호 업데이트).

User user = new User();
user.setPhone(131902331);

Map<String,RealmObject> userMap = new HashMap<>();
userMap.put("alex",user);

          mFirebaseFirestore
                  .collection("users")
                  .document(mFirebaseAuth.getUid())
                  .set(userMap, SetOptions.merge())
                  .addOnSuccessListener(new OnSuccessListener<Void>() {
                      @Override
                      public void onSuccess(Void aVoid) {
                          LOG.info("Success");
                      }
                  })
                  .addOnFailureListener(new OnFailureListener() {
                      @Override
                      public void onFailure(@NonNull Exception e) {
                          LOG.error("Failure "+e.toString());
                      }
                  });

내가 뭘 잘못하고 있는 거지?

거의 1년 전의 질문이라는 것은 알지만, 이것은 누군가에게 도움이 될 수 있습니다. 표기법 사용

db.collection("users")
  .document("frank")
  .update({
    "age": 13,
    "favorites.color": "Red"
  });

전화할 때set()문서에서 해당 문서의 기존 내용이 전달된 데이터로 바뀝니다.

맵에서 지정한 필드의 값만 업데이트하려면 다음을 사용합니다.update():

mFirebaseFirestore
  .collection("users")
  .document(mFirebaseAuth.getUid())
  .update(userMap)

문서 업데이트에 대한 내용은 Firestore 설명서를 참조하십시오.

2021년 기준으로 Firebase-firestore-ktx를 사용하는 경우 Alister 씨의 답변 구문이 약간 변경되었습니다(문서 참조).다른 버전의 라이브러리를 사용하는 사람들에게 여전히 유효할 수 있기 때문에 답변을 편집하지 않았습니다.

// Assume the document contains:
// {
//   name: "Frank",
//   favorites: { food: "Pizza", color: "Blue", subject: "recess" }
//   age: 12
// }
//
// To update age and favorite color:
db.collection("users").document("frank")
        .update(mapOf(
                "age" to 13,
                "favorites.color" to "Red"
        ))

저는 이 대답들 중 일부에서 이상한 표기법을 발견하고 있습니다.소방서 매개변수가 업데이트된 것이 아닐까요?어쨌든, 저는 저만의 답을 올리고 싶었습니다.

문서의 단일 요소를 업데이트하려면 다음 코드를 사용합니다.

db.collection("users").document("frank")
  .update("age", 13);

update() 매개 변수는 콜론으로 구분되지 않고 필요한 만큼의 키/값 쌍을 허용하며 이러한 응답 중 일부에 표시된 것처럼 배열 표기법 {}에 포함되지 않습니다.이들은 단순히 쉼표로 구분되어 추가됩니다.아래 참조:

.update(키, 값, 추가 키, 추가 값)

업데이트() 후 필요에 따라 OnSuccess/OnFailure 청취자를 자유롭게 추가할 수 있습니다.

동적 중첩 참조:

def nest_update(new, parent):
    return {parent+'.'+new: val for new, val in list(new.items())}

용도:

old = {'nested': {'a': 123,'b': 456, 'c': 789}}
new = {'b': 0}
    
print('\nOld:           ', old)
print('New:           ', nest_update(new, 'nested'))
print('New should be: ', {'nested.b': 0})


# OUTPUT
Old:            {'nested': {'a': 123, 'b': 456, 'c': 789}}
New:            {'nested.b': 0}
New should be:  {'nested.b': 0}

언급URL : https://stackoverflow.com/questions/47770161/firestore-update-only-one-field

반응형