【发布时间】:2020-09-22 11:52:14
【问题描述】:
- 我有一个用户注册动物的应用,
- 这些动物被抽签分开,
- 所以,要知道动物在哪里,用户只需 输入他的 TAG,然后我会在我的所有数据库中查找该标签,
- 示例:
收藏>很多
单据:Lot+NumberLot(Lot+number为ID,例如:Lot01、Lot02)。
在每个 Document Lot+NumberLot 我有一个子集合“动物”,在每个子集合动物中,
我有每只动物的文档,其中 ID 是用户键入的 TAG。
我的操作如下,用户输入标签但他不知道批次,所以,我在所有批次中搜索该标签,但是,如果用户有很多批次并且只想搜索 1 个动物,即使是从“动物”中检索单个文档,我也会为所有批次收费,我目前正在这样做:
-我的代码
lotRef.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
for (QueryDocumentSnapshot documentSnapshot: task.getResult()){
CollectionReference aniRef = lotRef.document(documentSnapshot.getId().toString())
.collection("Animals");
aniRef.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()) {
for (DocumentSnapshot documentSnapshot1 : task.getResult()) {
Animal aniFounded= documentSnapshot1.toObject(Animal.class);
if (aniFounded.getTagAni() != null && aniFounded.getTagAni().equals(tagAni)) {
Toast.makeText(Activity_AttSemBLE.this, aniFounded.getTagBoi().toString(),
Toast.LENGTH_LONG).show();
founded = true;
break;
}
}
}else{
Toast.makeText(Activity_AttSemBLE.this, "Not found", Toast.LENGTH_LONG).show();
}
}
});
if(founded){
founded = false;
break;
}
}
}else{
Toast.makeText(Activity_AttSemBLE.this, "No animal found", Toast.LENGTH_LONG).show();
}
}
});
如果动物存在,这个程序会找到动物,但我一直在阅读所有文件和所有地段,我想确保在找到动物后,我不会再被收费,如果我在哪里仍会向我收取所有文件的费用?
例如,我想找到 041712 TAG,但我不知道它所在的批次(因为用户不会记住批次,只记得标签),我不想必须经过所有批次和标签都找到它,我希望找到他后,我不需要阅读其余部分,因此我不会消耗不必要的查询
【问题讨论】:
标签: java android firebase google-cloud-firestore