繁体   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