在Firestore中是否有相应的`startsWith`?

时间:2017-10-27 16:41:38

标签: swift firebase google-cloud-firestore

Firestore documentation on making queries包含一些示例,您可以根据文档中的某些字段是否匹配,小于或大于您传入的某个值来过滤文档集合。例如:

db.collection("cities").whereField("population", isLessThan: 100000)

这将返回“人口”小于100000的每个“城市”。此类查询也可以在String类型的字段上进行。

db.collection("cities").whereField("name", isGreaterThanOrEqualTo: "San Francisco")

我没有看到执行子字符串搜索的方法。例如,这不可用:

db.collection("cities").whereField("name", beginsWith: "San")

我想我可以使用greaterThanlessThan自行添加类似内容,但我想先检查一下:

  • 为什么不存在此功能?

我担心它不存在,因为表现会很糟糕。

2 个答案:

答案 0 :(得分:2)

现在有可能:

db.collection('cities')
.where('name', '>=', 'San')
.where('name', '<', 'Sam');

有关更多详细信息,请参见Firestore query documents startsWith a string

答案 1 :(得分:1)

[Googler here] 您是正确的,Cloud Firestore中没有beginsWithcontains等字符串操作,您必须使用大于和不到比较。

你说“它不存在,因为表现会很糟糕”,虽然我不会使用你说的那些确切的词,但原因是表现。

所有Cloud Firestore查询都必须访问索引。这就是我们如何保证任何查询的性能随着结果集的大小而扩展,即使数据集增长。我们目前没有以一种能够方便地为您想要的查询提供服务的方式索引字符串数据。

全文搜索操作是顶级Cloud Firestore功能请求之一,因此我们当然会对其进行调查。

目前,如果您想进行全文搜索或类似操作,我们建议您与外部服务集成,我们会就如何执行此操作提供一些指导: https://firebase.google.com/docs/firestore/solutions/search