Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问Firestore子集合中字段的值_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

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

Java 如何访问Firestore子集合中字段的值,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我的数据库如下所示: 当我没有“红色区域”的集合名称时,如何访问“绿色区域”中显示的字段的值 如何在“红色区域”集合中循环查找字段“RequestStatus”等于“Completed”的所有集合 如果不收集,则无法检索文档值。因此,我建议将收藏名称更改为友谊状态。然后,您可以轻松检索文档的字段 它必须是这样的: FriendShip ---->Current User id --->Friendship Status -----> Doc

我的数据库如下所示:

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

  • 如何在“红色区域”集合中循环查找字段“RequestStatus”等于“Completed”的所有集合

    • 如果不收集,则无法检索文档值。因此,我建议将收藏名称更改为友谊状态。然后,您可以轻松检索文档的字段

      它必须是这样的:

      FriendShip
      
      ---->Current User id
      
           --->Friendship Status
      
               -----> Document id
      
      然后可以使用或函数

      上述结构的代码

      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());
                              }
                          }
                      });
      
      mfirebaseFirestore.collection(“友谊”).document(mCurrentUser.collection(“友谊状态”)
      .whereEqualTo(“请求状态”、“完成”)
      .get()
      .addOnCompleteListener(新的OnCompleteListener(){
      @凌驾
      未完成的公共void(@NonNull任务){
      if(task.issusccessful()){
      对于(QueryDocumentSnapshot文档:task.getResult()){
      Log.d(“abc”,document.getId()+”=>“+document.getData());
      }
      }否则{
      Log.d(“abc”,“获取文档时出错:”,task.getException());
      }
      }
      });
      
      注:


      Whereequalto
      在尝试查找集合中的数据时工作。因此,您必须查询到集合。然后使用
      whereequalto
      处理与查询类似的文档

      如果不收集,则无法检索文档值。因此,我建议将收藏名称更改为友谊状态。然后,您可以轻松检索文档的字段

      它必须是这样的:

      FriendShip
      
      ---->Current User id
      
           --->Friendship Status
      
               -----> Document id
      
      然后可以使用或函数

      上述结构的代码

      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());
                              }
                          }
                      });
      
      mfirebaseFirestore.collection(“友谊”).document(mCurrentUser.collection(“友谊状态”)
      .whereEqualTo(“请求状态”、“完成”)
      .get()
      .addOnCompleteListener(新的OnCompleteListener(){
      @凌驾
      未完成的公共void(@NonNull任务){
      if(task.issusccessful()){
      对于(QueryDocumentSnapshot文档:task.getResult()){
      Log.d(“abc”,document.getId()+”=>“+document.getData());
      }
      }否则{
      Log.d(“abc”,“获取文档时出错:”,task.getException());
      }
      }
      });
      
      注:

      Whereequalto
      在尝试查找集合中的数据时工作。因此,您必须查询到集合。然后使用
      whereequalto
      来处理与查询类似的文档

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

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

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

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

      如果出于任何原因,您无法从客户端执行此操作,您可以使用云函数,该函数依赖于Admin SDK,因此可以使用上面提到的
      getCollections()
      方法。

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

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

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

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


      如果出于任何原因,您无法从客户端执行此操作,您可以使用云函数,该函数依赖于Admin SDK,因此可以使用上面提到的
      getCollections()
      方法。

      我将尝试此方法,并在这里告诉您,谢谢您的帮助!我会尝试一下,然后在这里告诉你,谢谢你的帮助!与其描述你不知道的东西,不如编辑你的问题来展示你知道的东西?也就是说,如果有几十个朋友拥有数百种友谊状态,那么什么决定了从哪个朋友那里返回什么状态?与其描述你不知道的内容,不如编辑你的问题以显示你知道的内容?也就是说,如果有几十个朋友拥有数百种友谊状态,那么什么决定了从哪个朋友那里返回什么状态?