终于加入 SO 只是为了回答这个问题。
对于来自/为 python firestore.client 来到这里的任何人,这里有一个似乎对我有用的解决方案。
它基于公认答案的概念,但通过客户端而不是 db.reference() 并与来自 user12750908 的 answer 混合。
from firebase_admin import firestore
users = db.collection("users")\
.order_by("last_name")\
.where("last_name", ">=", last_name.upper())\
.where("last_name", "<=", last_name.lower() + "\uf8ff")\
.stream()
它适用于我所做的简单测试,但如果我稍后有问题,我会更新我的答案。提醒一下,这类似于
LIKE search%
而不是
LIKE %search%.
编辑 1
我没有看到该问题的任何标签,但 title 属性提到了 Android,因此这可能不一定直接回答问题,但如果您有 python API,这应该可以工作。不幸的是,我不确定 Android 版本中是否有等效的客户端/数据库分离,就像 Python 的 Firebase Admin 中的那样。我不想删除答案,因为在搜索类似答案的过程中我没有看到任何 Firestore 客户端的答案,并希望它可以帮助其他遇到问题的人。
编辑 2020 年 9 月 3 日 这似乎在部分时间内有效。大多数时候我似乎没有问题,但是当我将它应用到另一个项目时,我得到了意想不到的结果。长话短说,您可能需要复制保存要比较的数据的方式。例如,您可能需要有一个字段将 last_name 保存为全部大写,而另一个字段将其保存为全部小写,然后将第一个 where 子句更改为比较 last_name_upper 并将第二个子句更改为比较 last_name_lowercase。到目前为止,在我的第二个项目中,这似乎产生了更准确的结果,因此如果之前的答案效果不佳,您可能想尝试一下
2020 年 9 月 7 日编辑 2020 年 9 月 3 日之前的编辑部分准确。在我匆忙思考的过程中,我完全解决了它,我完全忘记了 firebase 不允许您在不同领域使用 、=。您可能需要执行两个查询并将它们合并,但您可能仍会阅读比您真正想要的更多的文档。使用适当的搜索词与高版本或低版本进行比较似乎给出了原始答案所期望的原始结果。例如:
.orderBy("last_name_upper")
.where("last_name_upper", ">=", this.searchForm.text.toUpperCase())
.where("last_name_upper", "<=", this.searchForm.text.toUpperCase() + "\uf8ff")