【问题标题】:FirebaseFirestoreException: UNIMPLEMENTED: Unsupported FieldFilter value type: 9FirebaseFirestoreException:未实现:不支持的 FieldFilter 值类型:9
【发布时间】:2018-01-24 13:35:40
【问题描述】:

当我尝试查询数据时,我从 Firebase 收到了这个奇怪的异常。这个错误偶尔会发生。有时它工作得非常好,但有时 task.isSuccessful 返回 false。 attrs 是一个字符串数组字段,在 Firestore 中有 2 个项目。是因为在字符串数组上使用whereEqualTo 而发生的吗?还是我错过了什么?

我使用this link 作为指导。我真的很想了解为什么会出现此错误。谢谢。

代码:

val queryOrderedAttributeList = attributeList
                .sortedBy { cardAttribute -> cardAttribute.name }
                .map { it.name.toLowerCase() }

        val db = FirebaseFirestore.getInstance()
        val collectionRef = db.collection("dbAllCards")
        val query = collectionRef.whereEqualTo("attrs", queryOrderedAttributeList)

query.get().addOnCompleteListener { task ->
            if (task.isSuccessful) {
                task.result.forEach { document: DocumentSnapshot? ->
                    document?.id?.let { cardList.add(it) }
                    Log.e("firebase", "${document?.id} -> ${document?.data}")
                }
            } else {
                Log.d("firebase", "Error getting documents: ", task.exception)
            }
            loadCardPathList(cardList)
        }

获取文档时出错:

com.google.firebase.firestore.FirebaseFirestoreException: UNIMPLEMENTED: Unsupported FieldFilter value type: 9
              at com.google.android.gms.internal.zzevs.zzf(Unknown Source)
              at com.google.android.gms.internal.zzenb.zza(Unknown Source)
              at com.google.android.gms.internal.zzeoa.zza(Unknown Source)
              at com.google.android.gms.internal.zzenf.zza(Unknown Source)
              at com.google.android.gms.internal.zzett.zza(Unknown Source)
              at com.google.android.gms.internal.zzett.zza(Unknown Source)
              at com.google.android.gms.internal.zzetu.zzb(Unknown Source)
              at com.google.android.gms.internal.zzeup.zzcg(Unknown Source)
              at com.google.android.gms.internal.zzeth.zzcg(Unknown Source)
              at com.google.android.gms.internal.zzevi.zzch(Unknown Source)
              at com.google.android.gms.internal.zzfmg.zzch(Unknown Source)
              at io.grpc.internal.zzac.zzdep(Unknown Source)
              at io.grpc.internal.zzaq.run(Unknown Source)
              at io.grpc.internal.zzeo.run(Unknown Source)
              at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
              at java.util.concurrent.FutureTask.run(FutureTask.java:237)
              at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
              at com.google.android.gms.internal.zzeuu$zza.run(Unknown Source)
              at java.lang.Thread.run(Thread.java:761)
            Caused by: com.google.adroid.gms.internal.zzfk: UNIMPLEMENTED: nsupported ieldFilter value ype: 9
              at com.google.android.gms.internal.zzfof.zzddl(Unknown Source)
              at com.google.android.gms.internal.zzevs.zzf(Unknown Source) 
              at com.google.android.gms.internal.zzenb.zza(Unknown Source) 
              at com.google.android.gms.internal.zzeoa.zza(Unknown Source) 
              at com.google.android.gms.internal.zzenf.zza(Unknown Source) 
              at com.google.android.gms.internal.zzett.zza(Unknown Source) 
              at com.google.android.gms.internal.zzett.zza(Unknown Source) 
              at com.google.android.gms.internal.zzetu.zzb(Unknown Source) 
              at com.google.android.gms.internal.zzeup.zzcg(Unknown Source) 
              at com.google.android.gms.internal.zzeth.zzcg(Unknown Source) 
              at com.google.android.gms.internal.zzevi.zzch(Unknown Source) 
              at com.google.android.gms.internal.zzfmg.zzch(Unknown Source) 
              at io.grpc.internal.zzac.zzdep(Unknown Source) 
              at io.grpc.internal.zzaq.run(Unknown Source) 
              at io.grpc.internal.zzeo.run(Unknown Source) 
              at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
              at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
              at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
              at com.google.android.gms.internal.zzeuu$zza.run(Unknown Source) 
              at java.lang.Thread.run(Thread.java:761) 

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    更新:自从我最初的回答以来,Cloud Firestore 增加了对这类查询的支持。您应该不会再看到此错误消息了。

    您现在可以查询数组,也可以通过array-contains 查询单个数组元素。


    [Firebaser here]您已正确诊断,您看到的错误消息是因为您正在对数组值执行whereEqualTo 查询。如果您将 Map<> 值传递给同一子句,您将收到类似的错误消息。

    我们要做的第一件事是改进此错误消息,然后可能会在将来添加对这些查询的支持。

    【讨论】:

    • 您知道还有另一种从 fireStore 查询数组的方法吗? @SamStern 感谢您顺便澄清了这个问题。我希望 Firebase 团队尽快解决此问题。
    • @MiloRambaldi 目前没有我知道的解决方法,但如果我找到了,我会在这里发布。
    猜你喜欢
    • 2021-05-26
    • 2012-02-12
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多