Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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:在android中查询数组中的所有元素_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java Firestore:在android中查询数组中的所有元素

Java Firestore:在android中查询数组中的所有元素,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我有一个数据结构,比如 /Split // Collection {authid} // Document /SentIvitation //Collection {auto-id} //Documnet amount //array 0:10 1:10 2:10 Phonenumbers//array

我有一个数据结构,比如

 /Split       // Collection
   {authid}   // Document
      /SentIvitation //Collection
          {auto-id}  //Documnet
            amount    //array
             0:10
             1:10
             2:10
             Phonenumbers//array
               0:987654321
               1:123456789
               2:234567890
我需要查询电话号码中的所有元素,并且我必须检查这些电话号码是否已经存在于另一个集合中。 我的数据结构的下一个路径是

/deyaUsers   //Collection
  {authid}.   //Documnet
      Name: "abc"
      Email: "abc@gmail.com"
      Phonenumber:987654321

在firestore中是否可以不使用任何索引?

您需要有如下查询:

当您从一个集合查询到另一个文档,然后从文档查询集合时

说明:

CurrentUser currentUser = FirebaseAuth.getCurrentUser();

firestore.collection("Split").document(currentUser.getUid()).collection("SendInvitation")
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                if (task.isSuccessful()) {
                                    //Handle Success
                                } else {
                                    //Handle Error
                                }
                            }
                        });
父节点为
“拆分”
时,首先获取
“拆分”集合
,然后根据
“authid”
可以有多个文档,因此您将根据当前用户(已登录的用户,从
FirebaseAuth
获取)获取文档

根据
authId
获取特定用户的
文档
后,您将从
authId文档
中获取该特定用户集合的
“发送邀请”

代码:

CurrentUser currentUser = FirebaseAuth.getCurrentUser();

firestore.collection("Split").document(currentUser.getUid()).collection("SendInvitation")
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                if (task.isSuccessful()) {
                                    //Handle Success
                                } else {
                                    //Handle Error
                                }
                            }
                        });
CurrentUser CurrentUser=FirebaseAuth.getCurrentUser();
firestore.collection(“拆分”).document(currentUser.getUid()).collection(“发送邀请”)
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//成功
}否则{
//处理错误
}
}
});
根据结构,这将是一个查询

希望有帮助。

如:

尽管Cloud Firestore可以存储数组,但它不支持查询数组成员或更新单个数组元素

如果您只想获得整个
论文
数组,则需要在
地图
上迭代,如下所示:

Map<String, Object> map = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
    if (entry.getKey().equals("Phonenumbers")) {
        Log.d("TAG", entry.getValue().toString());
    }
}
编辑2018年8月13日:

CurrentUser currentUser = FirebaseAuth.getCurrentUser();

firestore.collection("Split").document(currentUser.getUid()).collection("SendInvitation")
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                if (task.isSuccessful()) {
                                    //Handle Success
                                } else {
                                    //Handle Error
                                }
                            }
                        });
根据更新的文档,现在可以使用
whererraycontains()
方法基于数组值过滤数据。一个简单的例子是:

CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
此查询返回每个城市文档,其中regions字段是包含west_coast的数组。如果数组中有您查询的值的多个实例,则结果中只包含一次文档


我现在已经编辑了我的问题“我需要如何编写查询”该查询仍将使用更新结构。您能解释一下吗请检查答案此处我只需要电话号码字段有一个备用路径为了检查这些电话号码是否存在于另一个集合中,首先您需要获取它们。但这在云Firestore中是不可能的。您无法查询数组成员。那么您可以说如何将电话号码数组存储到firestore中,因为abouve requirementphone号码在一个长数组中。在我的例子中,987654321是值。我们可以使用它作为文件名并获取它。是的,这是另一种结构,其中电话号码将是
地图中的键。