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