【问题标题】:How to use a calculated derived field in the where clause or orderby clause in firestore如何在firestore的where子句或orderby子句中使用计算得出的派生字段
【发布时间】:2021-09-25 00:07:18
【问题描述】:

我正在使用一个计算字段,比如不在我的架构 Firestore 中的距离。它是通过调用函数来计算的。这工作正常。但是,我需要使用此字段(距离)来限制或按数据示例排序: .where ('distance', isLessThan :1000) 或者说: .orderBy ('distance')

.on Firestore 数据。我尝试使用这种方式,但是由于森林中不存在此“距离”字段,因此出现此错误:

[FirebaseAuth:] 准备创建服务连接以实现回退 W/System (15007):忽略标头 X-Firebase-Locale,因为它的值为 null。 D/FirebaseAuth(15007):通知 id 令牌侦听器有关用户 ( juo4UbaWhdVfmfkr8vyyiY5FNNc2 )。

谢谢!

【问题讨论】:

  • 你应该在你的文档中存储'距离',否则你查询时将一无所获。
  • 我很难理解你的问题。 Firestore 没有计算字段的概念,只能过滤数据库中存在的值,而不是计算值。你能完整显示你运行的查询吗?

标签: firebase flutter google-cloud-firestore


【解决方案1】:

Firestore 无法在查询中执行(自定义或其他)计算。它只能对实际存在于文档和索引中的值进行排序/过滤。

如果您有一个文档与某个位置相关联的用例,并且您想在某个区域内查找文档,则常见的方法是在每个文档中存储一个 geohash,然后按照说明进行查询在implement geoqueries on Firestore 的文档中。我在geoquerying on Firebase and Firestore 上的演讲中对这种方法进行了非常详细的解释。

【讨论】:

  • 谢谢!似乎firebase与我可以轻松创建或使用派生表或派生列的关系数据库不同,但是保存更多数据/哈希等是不切实际的,因为我只会使用此信息对列表视图进行排序。所以我会继续通过编码寻找不同的方法。我会要求 firebase 为将来增强此类选项。欣赏演讲
  • Firestore 确实不是关系型数据库,而是所谓的 NoSQL 数据库。如果您想要一个关系数据库,我建议您搜索具有您想要的功能的关系数据库。如果您决定继续使用 Firestore,我建议您阅读 NoSQL data modeling 并观看 Getting to know Cloud Firestore
  • 感谢您的建议
猜你喜欢
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多