如何根据 Firestore 数据库中的字段从集合中搜索文档?
Posted
技术标签:
【中文标题】如何根据 Firestore 数据库中的字段从集合中搜索文档?【英文标题】:How to search document(s) from a collection based on a Field in Firestore database? 【发布时间】:2020-02-10 08:29:23 【问题描述】:我正在开发一个 React Native 应用程序,我正在从一个 firebase 集合中获取配置文件。 我想添加一个搜索功能,当我输入用户名的前 1 个或 2 个(或更多)字母并按下搜索按钮时。 我应该能够获取以 1 或 2 个字母开头的用户名。
我确实检查了 Cloud Firestore 查询,但找不到适合我的问题的查询。
更新问题:
在上面的代码中,我添加了 Renaud Tarnec 回答的以下代码。
let queries = hashes.map(hash => rangeQueryParams(hash))
.map(range => profiles.where('hash', '>=', range.start).where('hash', '<', range.end)
.orderBy('displayName') // displayName is the name of Field here
.startAt(searchString)
.endAt(searchString + '\uf8ff')
.get());
但这似乎不起作用。我想这是因为范围过滤器和orderBy
在这里的不同字段上。
【问题讨论】:
您需要获取包含用户名的整个文档并在本地执行查询。 @JaydeepGalani 不,我实际上想获取所有字段,包括每个文档的用户名 【参考方案1】:您应该使用orderBy()
、startAt()
和endAt()
的组合,请参阅此处的文档:https://firebase.google.com/docs/firestore/query-data/order-limit-data?authuser=0
var searchString = 'Sh' //Example of value
firebase
.firestore()
.collection('yourCollectioName')
.orderBy('username')
.startAt(searchString)
.endAt(searchString + '\uf8ff')
.get()
.then(...)
查询中使用的字符 \uf8ff
在 Unicode 中的大多数常规字符之后,因此查询匹配所有以 searchString
开头的值。
【讨论】:
这里的'\uf8ff'是什么? 谢谢。 :) 如果您不介意,请查看我更新的问题。【参考方案2】:Firebase 推荐的全文搜索方法是使用 Algolia https://firebase.google.com/docs/firestore/solutions/search
使用 Firestore 的 start at 和 end at 查询以及有序集合当然可以。如果您需要在其他地方的应用程序中进行全文搜索,例如需要拼写容错等,那么值得考虑迁移到 Algolia,而不是使用复合 Firestore 查询
【讨论】:
这是考虑完全匹配。如何在搜索字符串时删除大写。这样我就可以搜索任何字母,即使它是大写或小写都会得到结果。另外,我如何检查名称之间的名称中是否有可用的字符串,比如名称是 puneet,如果我搜索 neet,它也会显示结果。以上是关于如何根据 Firestore 数据库中的字段从集合中搜索文档?的主要内容,如果未能解决你的问题,请参考以下文章
如何从flutter中的firestore文档字段中获取数据?
从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?
如何从firestore中检索swiftUI中的预定义项目列表?
如何从Swift中的Cloud FireStore Firebase访问特定字段