Vij*_*hri 4 firebase firebase-realtime-database google-cloud-firestore
基本上,我正在Firestore文档字段上编写搜索功能。我想写下面的SQL。我没有找到继续的解决方案。
SELECT * FROM员工,位置较低(employee_name),如'%johny%';
没有喜欢的运算符。请访问以下网址查看所有可用的运算符:https : //firebase.google.com/docs/firestore/query-data/queries 该页面还包含查询数据库的不同方法。
对于不区分大小写的排序/查询,请参阅Cloud Firestore使用查询不区分大小写的排序中的答案
它基本上建议将小写数据存储在其他字段中。
可能在另一篇文章的错误主题下回答了这个问题,但请在这里查看我的答案
到目前为止,该解决方案对我有用,但我将名字分为名字和姓氏。然后“开头为”(LIKE search%)逻辑就足够了,因为 IMO 人们通常开始输入名称的开头,而不是需要“包含”匹配的内容(LIKE %search%)。
以防万一其他帖子因错误部分而被删除(如果可能的话),这里是来自 firestore 客户端角度的片段:
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()
Run Code Online (Sandbox Code Playgroud)
编辑 09-03-2020这看起来在部分时间有效。大多数时候我似乎没有遇到问题,但是当我将其应用到另一个项目时,我得到了意想不到的结果。长话短说,您可能需要复制保存要比较的数据的方式。例如,您可能需要一个字段来保存全部大写的last_name,另一个字段来保存全部小写的last_name,然后更改第一个where 子句来比较last_name_upper,第二个子句来比较last_name_lowercase。到目前为止,在我的第二个项目中,这似乎会产生更准确的结果,因此如果之前的答案效果不佳,您可能想尝试一下
编辑 09-07-2020之前的编辑 09-03-2020 部分准确。在我匆忙思考的过程中,我完全解决了这个问题,我完全忘记了 firebase 不允许您在不同的字段中使用 <、>、<=、>= 。您可能需要执行两个查询并将它们合并,但您可能仍然会阅读比您真正想要的更多的文档。使用适当的搜索词与较高版本或较低版本进行比较似乎可以给出原始答案所期望的原始结果。例如:
.orderBy("last_name_upper")
.where("last_name_upper", ">=", this.searchForm.text.toUpperCase())
.where("last_name_upper", "<=", this.searchForm.text.toUpperCase() + "\uf8ff")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5188 次 |
| 最近记录: |