如何访问Firestore子集合中的字段的值

时间:2019-10-16 12:23:02

标签: java android firebase google-cloud-firestore

我的数据库如下:

Picture

当我没有“红色区域”的集合名称时,如何访问“绿色区域”中显示的字段的值?

  • 如何循环遍历“红色区域”集合以查找所有字段“ RequestStatus”等于“已完成”的集合?

2 个答案:

答案 0 :(得分:2)

没有收集就无法检索文档值。因此,我建议将收藏名称更改为“友谊”状态。然后,您可以轻松地检索文档的字段。

它必须像这样:

FriendShip

---->Current User id

     --->Friendship Status

         -----> Document id

然后您可以使用orderbyEqualto函数。

以上结构的代码。

mfirebaseFirestore.collection("Friendship").document(mCurrentUser).collection("FriendshipStatus")
                .whereEqualTo("RequestStatus", "Completed")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d("abc", document.getId() + " => " + document.getData());
                            }
                        } else {
                            Log.d("abc", "Error getting documents: ", task.getException());
                        }
                    }
                });

注意:

Whereequalto在您尝试在集合中查找数据时有效。因此,您必须查询直到收集。然后使用whereequalto来记录与您的查询相似的文件

答案 1 :(得分:1)

documentation中所述,无法使用客户端SDK (Android,iOS,Web)列出文档的子集合。

另一方面,“ Cloud Firestore 服务器客户端库getCollections()方法列出了文档引用的所有子集合”。

由于您似乎正在使用Android SDK,因此需要找到解决方法。一种可能的解决方法是将子集合名称保存在父文档的专用字段中。例如,您可以使用Array字段存储子集合的所有名称。

通常,当您使用Android SDK创建子集合的第一个文档时,会填充此字段。

万一出于某种原因,您不能从客户端执行此操作,则可以使用依赖于Admin SDK的Cloud Function,因此可以使用上面提到的getCollections()方法。