javascript - 如何订购由仅包含一个对象的 firebase 集合
问题描述
我正在尝试按仅包含一个对象且该对象包含一个数组的“collectionGroup”进行排序。像这样
名为“Calculations”的 collectionGroup 仅包含一个名为“0”的 Doc,并且该 Doc 包含一个数组,现在我尝试使用 orderBy() 方法对它们进行排序,但它不起作用。
这是我的代码。
calculations = await db
.firestore()
.collectionGroup("Calculations")
.orderBy("symbol", "asc")
.limit(limit)
.get()
}
正如您在图片中看到的那样,每个数组中都有一个值“符号”,所以我尝试使用它来订购但无法这样做,firebase 说没有找到匹配的索引。
解决方案
查询的问题:
除非您知道此答案中解释的完整对象,否则您不能在对象数组上使用orderBy
或喜欢运算符。理想情况下,您应该使用子集合而不是数组。“计算”似乎已经是一个子集合,那么如果您将计算存储在它的文档中而不是单个文档中的数组中,那么您的查询应该可以正常工作。array-contains
索引问题:
如果您看到“无匹配索引”错误,则表示查询需要索引。您可以从 Firebase 控制台手动创建索引,也可以使用错误抛出的链接创建它(曾经被抛出)。客户端 SDK存在一个问题,即需要索引的错误不包括创建索引的链接。存在手动创建索引但未按预期工作的问题。
但是,Admin SDK 仍然会引发包含单击以创建索引链接的错误,我建议您尝试使用云函数模拟器在本地的云函数中运行您的查询,并使用错误引发的链接。
您可以参考这些答案,详细了解如何使用引发我的 Admin SDK 的链接创建索引:
推荐阅读
- silverlight-4.0 - Silverlight 4 应用程序在 visual-studio-2015 中的 silverlight 5 中运行
- c++ - 创建了不同类型的节点
- typescript - 打字稿动态类型和泛型
- hyperledger-fabric - 无法在超级账本 Fabric 中启动 Raft 共识中的订购者
- android - 加载初始数据时分页库不会触发观察
- push-notification - 带有 .NET 的 ActiveMQ
- c# - 与 localhost C# 的双向通信
- swift - 为旁白选择视图中的第一个元素
- python - 使用 Python/BeautifulSoup 从 HTML 输出简单文本
- list - 是否有一个简单的解决方案来导出过滤的后端列表