ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Firestore DocumentSnapshot.exists()가 false를 반환할 때
    카테고리 없음 2020. 12. 24. 02:36

    아래는 Firestore에 문서가 있는지 없는지 확인하는 방법을 구글링했을 때 나온 방법이다.

    java - Checking if a document exists in a Firestore collection - Stack Overflow

     

    DocumentSnapshot.exists()를 사용하는 방법이 대표 답변으로 채택되어있다.

    아래는 채택된 답변의 코드를 그대로 복사해 온 것이다.

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    DocumentReference docIdRef = rootRef.collection("yourCollection").document(docId);
    docIdRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    Log.d(TAG, "Document exists!");
                } else {
                    Log.d(TAG, "Document does not exist!");
                }
            } else {
                Log.d(TAG, "Failed with: ", task.getException());
            }
        }
    });

    아래에는 이해를 돕기 위해 참고할 만한 공식 문서의 링크를 걸어두었다. (필자가 주로 쓰는 언어가 코틀린이어서 코틀린 링크를 걸어두었다. 다른 언어를 주로 쓰시는 분들도 대충 설명은 이해할 수 있을 것이다.)

    DocumentReference#get()

    https://firebase.google.com/docs/reference/kotlin/com/google/firebase/firestore/DocumentReference?authuser=0#get

    DocumentSnapshot#exists()

    https://firebase.google.com/docs/reference/kotlin/com/google/firebase/firestore/DocumentSnapshot?authuser=0#exists

     

    필자는 위의 답변을 참고하여 코드를 작성했다. 그런데 실제로 exists()를 써보니, 분명 있는 문서인데도 결과는 false가 나왔다.

     

    온갖 삽질을 한 끝에 얻은 결론만 말하자면,

    문서가 있더라도 그 문서 하위에 필드(문서 안에 컬렉션 안에 다시 문서가 갖고 있는 필드 말고, 문서 바로 하위에 있는 필드)가 없으면 exists()를 했을 때 결과가 false가 나온다.

     

    혹시 본인이 아래와 같은 구조의 데이터베이스를 갖고있다면,

     

    collection1 -> document1 -> collection2 -> document2 -> 필드

     

    db.collection("collection1").document("document1")의 경우는 false를 반환하더라도

    db.collection("collection1").document("document1").collection("collection2").document("document2")의 경우는 true를 반환할것이다.

     

    댓글

Designed by Tistory.