如何查询Firebase Firestore引用数据类型?

问题描述:

我使用的公司的FireStore reference数据类型来存储到用户的参考如图所示的截屏下面如何查询Firebase Firestore引用数据类型?

用户参考

enter image description here

用户集合

enter image description here

当我试图查询这些数据时,我得到一个ClassCastException(我试图将其转换为String只是为了它)。

代码

//.. this function reads data from DocumentSnapshot 
//.. and converts to an Organization 
private fun DocumentSnapshot.toOrganization(): Organization { 
    //.. some code 
     (this.data["members"] as ArrayList<HashMap<String, Any>>).map { toOrgMember(it) }) 
    //.. more code 
} 

fun toOrgMember(map: Map<String, Any>): OrgMember { 
    //map["user"] as String throws ClassCastException. Refer first screenshot 
    return OrgMember(map["id"] as Long, UserRef(map["user"] as String), map["type"] as String, 
     asJobTitlesList(map["jobTitles"] as String)) 
} 

堆栈跟踪

10-14 20:31:17.503 15569-15569/com.a.b W/System.err: Caused by: java.lang.ClassCastException: com.google.android.gms.internal.zzegf cannot be cast to java.lang.String 
10-14 20:31:17.504 15569-15569/com.a.b W/System.err:  at feature.model.core.CoreUtilsKt.toOrgMember(CoreUtils.kt:28) 
10-14 20:31:17.504 15569-15569/com.a.b W/System.err:  at feature.model.organization.OrgRemoteKt.toOrganization(OrgRemote.kt:55) 

要我应该投什么类的引用数据类型? (com.google.android.gms.internal.zzegf看起来像不应该使用的内部类)

截至目前,我没有在docs中找到任何示例作为参考类型。 任何帮助,将不胜感激。

我们需要查看一些代码才能给出答案。但与此同时,这是我的查询片段的样子,它假定您正在寻找一些独特的东西,如果不是,您可以遍历结果。

FireBaseFirestore db = FirebaseFirestore.getInstance(); 
collectionRef = db.collection("yourCollection"); 
Query query = collectionRef.whereEqualTo("Field", "yourQuery"); 
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 
         @Override 
         public void onComplete(@NonNull Task<QuerySnapshot> task) { 
          if(task.isSuccessful()) { 
           QuerySnapshot qSnap = task.getResult(); 
           if (!qSnap.isEmpty()) { 
            Log.d("Query Data", String.valueOf(task.getResult().getDocuments().get(0).getData()));          
           } else { 
            Log.d("Query Data", "Data is not valid"); 

           } 

          } 
         } 
        }); 
+0

我按照您的要求添加了代码。希望它有帮助。 –

从集合中获取引用时,Firestore会返回DocumentReference。如果将演员表更改为DocumentReference不起作用,请跟踪此issue

+0

是的..铸造到DocumentReference失败..看起来你是对的,这是一个错误。 –

我遭受同样的问题。但我可以使用下面的方法解决这个问题:

DocumentReference docRef = firestore.document(map.get("reference_field").toString()); 

我不确定这是否正确,但这种方式对我很有用。

- 更新 -

看来新公司的FireStore版本(11.6.0)在Android上不能用我的方式。但它可以直接投射

DocumentReference docRef = (DocumentReference) map.get("reference_field");