gpt4 book ai didi

java - Firestore collectionReference 返回所有文档

转载 作者:行者123 更新时间:2023-12-02 08:48:30 25 4
gpt4 key购买 nike

我正在使用 Firebase Firestore 查询具有特定 ID 的一些文档。这是我的结构:

编辑:在此行之后添加屏幕截图和说明:

generateIdid 具有相同的值。我有这些“id”的列表,我想搜索 public_messages 集合以返回我提供的“id”列表的项目列表。

firestore structure

root
----- public_messages
---------- generatedId
-------------------- name
-------------------- id
---------- generatedId
-------------------- name
-------------------- id
----- other data

我使用以下代码来查询具有特定 id 的消息:

 ArrayList<String> keys ... (this has some keys)

CollectionReference collectionReference = firebaseFirestore.collection("public_messages");

for (String id : keys) {
collectionReference.whereEqualTo("id", id);
}

collectionReference.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
int count = 0;
for (QueryDocumentSnapshot document : task.getResult()) {
count++;
}
loog("total messages = " + count);
} else {
Log.d("TAG", "Error getting documents: ", task.getException());
}
}
});

onComplete中,变量task.getResult()返回所述集合中的所有文档。因此,变量 count 表示所述集合中的文档总数。

我只想查询指定 id 的结果。 id 的数量可以超过 10(这显然是 Google 设置的限制,我试图通过使用 for 循环来规避该限制)。我该怎么办?

最佳答案

解决这个问题的关键是利用Tasks的whenAllSuccess(Collection> tasks) :

Returns a Task with a list of Task results that completes successfully when all of the specified Tasks complete successfully.

就像下面的代码行一样:

CollectionReference collectionReference = FirebaseFirestore.getInstance().collection("public_messages");
ArrayList<String> ids = new ArrayList<>(); //Contains your keys
ArrayList<Task<QuerySnapshot>> tasks = new ArrayList<>();
for (String id : ids) {
Task<QuerySnapshot> task = collectionReference.whereEqualTo("id", id).get();
tasks.add(task);
}

Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
for (Object object : list) {
PublicMessage publicMessage = ((DocumentSnapshot) object).toObject(PublicMessage.class);
}
Log.d("TAG", "Finished getting all " + list.size() + " documents");
}
});

onSuccess() 触发时,您将确信您已经获得了所有文档。

关于java - Firestore collectionReference 返回所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60927548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com