【发布时间】:2020-03-30 09:26:36
【问题描述】:
我正在使用 Firebase Firestore 查询一些具有特定 ID 的文档。这是我的结构:
编辑:在此行之后添加的屏幕截图和说明:
generatedId 和 id 具有相同的值。我有这些“id”的列表,我想搜索public_messages 集合以返回我提供的“id”列表中的项目列表。
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 循环来规避这个限制)。我该怎么办?
【问题讨论】:
-
请编辑您的问题并将您的数据库结构添加为屏幕截图并指明您想要获得的确切过滤。
-
添加了截图和说明。
-
我不确定我是否完全理解它。所以你有一个 id 列表,并且你想获取与所有这些 id 对应的所有文档?这是正确的吗?
-
是的。并且 id 的数量超过 10。或者,我正在考虑使用 DocumentReference 单独获取每条消息,但这将大大增加单个 get() 命令的数量(并且失败的风险也会增加)。所以我想制定一个解决方案,我可以一次搜索所有这些。
-
我现在明白了。好的,我给你写一个答案。
标签: java android firebase google-cloud-firestore