-
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()
DocumentSnapshot#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를 반환할것이다.