繁体   English   中英

Google Firestore 集合组的问题 - whereArrayContains

[英]Problems with Google Firestore collectionGroup - whereArrayContains

我正在开发一个用 Java 编写的 Android 应用程序。 我正在尝试使用collectionGroupwhereArrayContains查询 Cloud Firestore 中的文档。

我在 Cloud Firestore 中的结构如下所示:

Teams (collection)
  - teamUUID (document)
  - reservations(collection)
     - reservationDate (document)
     - places (collection)
         - userUUIDs (array of strings) 
               -> one entry ->"vQn9vbWzTtcsB71hgPBhX2uWBuI3"
         - placeID (document)

结构部分截图

我想获取集合场所中的所有文档,其中userUUIDs字段包含特定字符串。 我的代码如下:

db.collectionGroup("places")
                    .whereArrayContains("userUUIDs", 
                       "vQn9vbWzTtcsB71hgPBhX2uWBuI3")
                    .get()
                    .addOnSuccessListener(queryDocumentSnapshots -> {
                           Log.d(TAG, String.valueOf(queryDocumentSnapshots.getDocuments().size()));
                           if (queryDocumentSnapshots.isEmpty()) {
                               //nothing found
                               Log.d(TAG, "nothing found for this user");

如果执行此代码,则查询成功,但不返回任何文档。 如果我遗漏了.whereArrayContains("userUUIDs", "vQn9vbWzTtcsB71hgPBhX2uWBuI3"),则返回一个文档。

Google Firestore 自动创建索引来查询“userUUIDs”。

在 Firestore 中创建的索引

为什么使用whereArrayContains没有返回文档?

编辑:所有查询都存在问题接缝。 我向位置添加了一个字符串testValue并进行了whereEqualTo查询。 结果是一样的。 创建索引后(通过控制台中的链接自动),onSuccessListener 代码被执行,但没有找到文档。

提前致谢。

为什么使用 whereArrayContains 没有返回任何文档?

因为您很可能没有创建正确的索引。 如果userUUIDs存在于“places”集合中的文档中,则在运行应用程序时,您会在 logcat 中找到如下消息:

原因:io.grpc.StatusException:FAILED_PRECONDITION:查询需要收集位置和字段 userUUID 的 COLLECTION_GROUP_CONTAINS 索引。 你可以在这里创建它: https://console.firebase.google.com/v1/r/project/..

您只需单击该链接或复制,然后将 URL 粘贴到 web 浏览器中,您的索引就会自动创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM