Firestore查询多个字段的相同值

时间:2018-03-06 23:37:51

标签: swift firebase search google-cloud-firestore

是否可以在firestore文档中查询相同值的多个字段?

想象一下,我有很多文件,其中每个都描述了一项运动:

sportsRef.collection("sports").documents [
["bowling" : [
"equipment": "bowling ball, bowling alley, bowling shoes",
"description": "bowl the ball" ]]

["football": [
"equipment": "ball, boots, shin pads, goalie gloves",
"description": "kick the ball in the goal" ]]

["darts": [
"equipment": "darts, dartboard",
"description": "throw the dart at the board" ]]

["boxing": [
"equipment": "boxing gloves, ring",
"description": "punch your contender" ]]

["shot put": [
"equipment": "shot put",
"description": "throw the shot put, looks like a ball" ]]
]

有没有办法进行查询,如果我搜索" ball"的值,将返回所有包含" ball"在他们的价值观内因此,在这种情况下,我将返回保龄球,足球和铅球("球"在射击的描述中)。

我问的原因是因为我在我的iOS应用程序中实现了一个UISearchController,并试图通过在我的应用程序中构建一个查询来在我的Firestore中进行搜索。

2 个答案:

答案 0 :(得分:1)

Firestore不支持子字符串,正则表达式或全文搜索类型的查询。这些类型的搜索无法按照Firestore管理索引的方式进行扩展。

如果您需要全文搜索,请考虑将数据复制到搜索引擎(如Algolia)中。这种解决方案是discussed in the Firebase docs

答案 1 :(得分:1)

执行类似操作的一种方法是重构数据,如下所示:

["bowling" : [
"ball": true, "bowling alley": true, "bowling shoes": true,
"description": "bowl the ball" ]]

然后查询“ball”等于true的文档:

Firestore.firestore().collection("sports").whereField("ball", isEqualTo: true)