[英]Check for document existence in Firestore
我正在嘗試查找我的數據庫中是否存在某些項目。
如果它不存在,我想添加它。
如果它存在,我想顯示一條消息。
我使用的代碼:
CollectionReference colRefMyBooks = db.collection( "Users" ).document( auth.getUid() ).collection( "MyBooks" );
Query queryMyBooks = colRefMyBooks.whereEqualTo("BookID", bookId);
queryMyBooks.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Toast.makeText(BookDetailActivity.this, "Book already in my list", Toast.LENGTH_SHORT).show();
}
} else {
db.collection( "Users" ).document( auth.getUid() ).collection( "MyBooks" ).add( general_book );
}
}
});
只要有一個集合"MyBooks"
,此代碼就可以正常工作。 但是,如果沒有集合"Mybooks"
,我希望它認為任務不成功,因此添加該項目。
我得到的是它跳過了整個 onComplete ,因此沒有添加任何東西。
這是否意味着我必須先檢查一個集合是否存在,如果有文檔則在其中?
謝謝
無論是否存在任何 collections,一個未找到文檔的查詢將始終被視為“成功”。 此行為無法更改。
相反,您需要做的是檢查結果集中是否沒有文檔,然后從那里決定您要做什么:
queryMyBooks.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
QuerySnapshot snapshot = task.getResult();
if (snapshot.isEmpty()) {
db.collection( "Users" ).document( auth.getUid() ).collection( "MyBooks" ).add( general_book );
}
else {
for (QueryDocumentSnapshot document : snapshot) {
Toast.makeText(BookDetailActivity.this, "Book already in my list", Toast.LENGTH_SHORT).show();
}
}
}
}
});
請注意,collections 並不真正“存在”。 沒有添加或刪除 collections 的操作。 只有修改文檔的操作。 集合僅在包含至少一個文檔時才會出現在控制台中。 如果它不包含任何文檔,它就會消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.