【问题标题】:Firestore Comparison Operators - contains, does not contain, starts withFirestore 比较运算符 - 包含、不包含、开头为
【发布时间】:2017-11-09 06:18:55
【问题描述】:

来自文档“... where() 方法采用三个参数:一个要过滤的字段、一个比较操作和一个值。比较可以是 或 >= ……”

我们需要执行的查询是:

  • 等于 (==)
  • 不等于 (???)
  • 小于 (
  • 大于 (>)
  • 小于或等于 (
  • 大于或等于 (>=)
  • 包含 (???)
  • 不包含 (???)
  • 以 (???) 开头

在这个question 中,建议是实现全文搜索,例如 Elastic 或 Algolia。我不需要全文搜索——我只需要这些基本运算符来搜索指定字段。但我遇到的更大问题是我的应用程序在很长一段时间内处于离线状态,我们会离线缓存我们需要的数据,并且离线全文搜索不是一种选择(除非您获得 Enterprise($$ $$$$) 的 Algolia 许可证 - 但对于我们正在寻找的东西来说似乎还是有点矫枉过正。

你们中的任何人对 where("FIELD", "???", "string") when "???" 有任何解决方案吗?是“不等于”、“包含”、“不包含”还是“开头为”?

感谢任何想法。

【问题讨论】:

  • 我认为 google 应该为这个 conatain saga 提供解决方案
  • 好点,查询中的 OR 运算符在哪里。你只能做AND?
  • 在来自 Google/Firebase 的其中一个 cmets 中,他们表示他们正在研究这类事情。如果 Google / Firebase 的某个人可以给出一个指示性的时间线,那将是真正有帮助的。他们说这是一个高优先级,我知道 Firestore 仍处于测试阶段。但是,在 3 个月或 3 年内获得它的不明确的“我们有希望”会非常有帮助。如果是 3 个月,那么我们可能会像现在这样蹒跚而行,或者 3 年我们需要在 Firestore 中寻找用于离线搜索的替代解决方案。
  • @StephenCrampton 巧妙地使用了我在下面的回答中描述的“array-contains”查询运算符值得考虑。

标签: google-cloud-firestore


【解决方案1】:

Cloud Firestore 中没有原生“包含”、“不包含”、“开始于”或“结束于”查询。

您可以使用<> 近似一个非常有限的“开始于”查询,但是:

// All names starting with "Sa"
db.collection("people")
  .where("name", ">", "Sa")
  .where("name", "<", "Saz")

【讨论】:

    【解决方案2】:

    Firestore 添加了“array-contains”查询运算符。这意味着我们可以将字段的反卷积版本存储为子字符串数组,然后使用“array-contains”运算符。见:

    https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 2023-03-28
      • 2017-02-05
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2016-03-01
      相关资源
      最近更新 更多