【发布时间】:2020-02-02 19:15:10
【问题描述】:
我正在使用具有以下结构的后端 Firestore 数据库构建聊天应用程序。
我正在获取如下所述的数据。它返回我的用户 ID 在字段“userArray”中涉及的频道列表,并根据给定的日期/时间获取“lastUpdatedOn”数据。
registration = fireStoreDb.collection(clsUtility.RootCollections.Channels.toString())
.whereArrayContains("userArray", loggedInPsno)
.whereGreaterThanOrEqualTo("lastUpdatedOn", lastChannelUpdateDateTime)
.orderBy("lastUpdatedOn", Query.Direction.ASCENDING)
.addSnapshotListener((queryDocumentSnapshots, e) -> {
if (e != null) {
Log.w("loadUsers", "Listen failed.", e);
return;
}
在上面的例子中,它在 android logcat 中显示了一个创建复合索引的错误。复合索引的创建完成,但仍然收到相同的错误消息。
2019-10-04 17:46:30.562 26824-27054/net.jayamsoft.chat W/Firestore: (21.1.1) [Firestore]: 侦听查询(userArray array_contains 90348324 和 lastUpdatedOn >= Timestamp( seconds=1570189540, nanoseconds=484000000) order by lastUpdatedOn, name) failed: Status{code=FAILED_PRECONDITION, description=查询需要索引。你可以在这里创建它:https://console.firebase.google.com/project/easychat-lthe/database/firestore/indexes?create_composite=Ck5wcm9qZWN0cy9lYXN5Y2hhdC1sdGhlL2RhdGFiYXNlcy8oZGVmYXVsdCkvY29sbGVjdGlvbkdyb3Vwcy9DaGFubmVscy9pbmRleGVzL18QARoNCgl1c2VyQXJyYXkYARoRCg1sYXN0VXBkYXRlZE9uEAEaDAoIX19uYW1lX18QAQ,cause=null} 2019-10-04 17:46:30.567 26824-26824/net.jayamsoft.chat W/loadUsers:收听失败。 com.google.firebase.firestore.FirebaseFirestoreException:FAILED_PRECONDITION:查询需要索引。你可以在这里创建它:https://console.firebase.google.com/project/easychat-lthe/database/firestore/indexes?create_composite=Ck5wcm9qZWN0cy9lYXN5Y2hhdC1sdGhlL2RhdGFiYXNlcy8oZGVmYXVsdCkvY29sbGVjdGlvbkdyb3Vwcy9DaGFubmVscy9pbmRleGVzL18QARoNCgl1c2VyQXJyYXkYARoRCg1sYXN0VXBkYXRlZE9uEAEaDAoIX19uYW1lX18QAQ 在 com.google.firebase.firestore.util.Util.exceptionFromStatus(com.google.firebase:firebase-firestore@@21.1.1:121) 在 com.google.firebase.firestore.core.EventManager.onError(com.google.firebase:firebase-firestore@@21.1.1:131) 在 com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(com.google.firebase:firebase-firestore@@21.1.1:378) 在 com.google.firebase.firestore.core.FirestoreClient.handleRejectedListen(com.google.firebase:firebase-firestore@@21.1.1:307) 在 com.google.firebase.firestore.remote.RemoteStore.processTargetError(com.google.firebase:firebase-firestore@@21.1.1:551) 在 com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(com.google.firebase:firebase-firestore@@21.1.1:436) 在 com.google.firebase.firestore.remote.RemoteStore.access$100(com.google.firebase:firebase-firestore@@21.1.1:53) 在 com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(com.google.firebase:firebase-firestore@@21.1.1:176) 在 com.google.firebase.firestore.remote.WatchStream.onNext(com.google.firebase:firebase-firestore@@21.1.1:108) 在 com.google.firebase.firestore.remote.WatchStream.onNext(com.google.firebase:firebase-firestore@@21.1.1:38) 在 com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(com.google.firebase:firebase-firestore@@21.1.1:119) 在 com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(com.google.firebase:firebase-firestore@@21.1.1) 在 com.google.firebase.firestore.remote.AbstractStream$CloseGuardedRunner.run(com.google.firebase:firebase-firestore@@21.1.1:67) 在 com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(com.google.firebase:firebase-firestore@@21.1.1:110) 在 com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(com.google.firebase:firebase-firestore@@21.1.1:120) 在 io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33) 在 io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33) 在 io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:563) 在 io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) 在 io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(com.google.firebase:firebase-firestore@@21.1.1:224)
【问题讨论】:
标签: android firebase google-cloud-firestore