簡體   English   中英

檢查 Firestore 中的文檔是否存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM