我正在尝试查找数据库中是否存在某些项目。
如果它不存在,我想添加它。
如果存在,我想显示一条消息。
代码使用:
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,因此不添加任何内容。
这是否意味着我必须先检查是否存在一个集合,如果要收集,则必须在其中检查?
谢谢
答案 0 :(得分:0)
没有任何文档的查询将始终被视为“成功”,无论是否存在任何集合。此行为无法更改。
您要做的是检查结果集中是否没有文档,然后从那里决定要做什么:
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();
}
}
}
}
});
请注意,集合实际上并没有“存在”。没有添加或删除集合的操作。仅存在用于修改文档的操作。仅当集合包含至少一个文档时,该集合才会出现在控制台中。如果它不包含任何文档,它将消失。