Google cloud firestore Firestore比较运算符-包含,不包含,以开头

Google cloud firestore Firestore比较运算符-包含,不包含,以开头,google-cloud-firestore,Google Cloud Firestore,从文档“…where()方法接受三个参数:要筛选的字段、比较操作和值。比较可以是=…” 我们需要进行的查询包括: 等于(=) 不等于(?) 少于() 小于或等于 包含(???) 不包含(???) 以(???)开头 在这种情况下,建议实现全文搜索,如Elastic或Algolia。我不需要全文搜索-我只需要这些基本运算符在指定字段中搜索。但我面临的更大问题是,我的应用程序在相当长的一段时间内处于离线状态,我们缓存了我们需要的数据,离线全文搜索不是一个选项(除非您获得了Algolia的企业($$

从文档“…where()方法接受三个参数:要筛选的字段、比较操作和值。比较可以是=…”

我们需要进行的查询包括:

  • 等于(=)
  • 不等于(?)
  • 少于()
  • 小于或等于
  • 包含(???)
  • 不包含(???)
  • 以(???)开头
在这种情况下,建议实现全文搜索,如Elastic或Algolia。我不需要全文搜索-我只需要这些基本运算符在指定字段中搜索。但我面临的更大问题是,我的应用程序在相当长的一段时间内处于离线状态,我们缓存了我们需要的数据,离线全文搜索不是一个选项(除非您获得了Algolia的企业($$$$$)许可证,但对于我们正在寻找的内容来说,这似乎还是太过了)

当“?”是“不等于”、“包含”、“不包含”或“以开头”时,你们中有人对其中(“字段”、“字符串”)有什么解决方案吗

非常感谢您的任何想法。

Cloud Firestore中没有本机的“包含”、“不包含”、“以开头”或“以结尾”查询

您可以使用
来近似一个非常有限的“start with”查询,但是:

// All names starting with "Sa"
db.collection("people")
  .where("name", ">", "Sa")
  .where("name", "<", "Saz")
//所有以“Sa”开头的名称
db.集合(“人”)
.其中(“名称”、“名称”、“Sa”)
.where(“name”,”Firestore添加了“array contains”查询运算符。这意味着我们可以将字段的反褶积版本存储为子字符串数组,然后使用“array contains”运算符。请参阅:


我认为谷歌应该为这个问题提供一个解决方案,即sagaGood points,以及OR运算符在查询中的位置。你只能做和?在谷歌/Firebase的一条评论中,他们说他们正在做这类事情。如果谷歌/Firebase的人能给出一个指示性的时间线,那么真正有帮助的是他们说这是一个高度优先的项目,我知道Firestore仍处于测试阶段。但一个非承诺性的“我们有希望”在3个月或3年内实现它将非常有用。如果是3个月,那么我们可能会一瘸一拐地前进,或者3年后我们需要为Firestore中的离线搜索寻找替代解决方案。@StephenCrampton巧妙地使用数组包含“查询运算符”,如下面我的回答所述,值得考虑。