我在Firestore数据库中执行复杂查询时遇到问题。我已经无数次阅读了文档,所以我知道限制在哪里,但我想知道是否有一种方法来构建数据,因此它支持我的用例。让我先解释一下用例:
我有一份工作列表,用户和我希望能够根据某些条件列出/过滤作业,并根据某些标准列出/过滤用户。
作业
JOB ID
- job type (1 of predefined values)
- salary (any number value)
- location (any value)
- long
- lat
- rating (1 - 5)
- views (any number value)
- timeAdded (any timestamp value)
- etc.
用户
User ID
- experiences (0, 1 or more of predefined values)
- experience1
- jobCategory
- jobName
- timeEmployed
- experience2
- etc
- languages (0, 1 or more of predefined values)
- language1
- languageName
- proficency
- language2
- etc.
- location (any value)
- long
- lat
- rating (1 - 5)
- views (any number value)
- timeLastActive (any timestamp value)
- etc.
按字段过滤只能有一个值就可以了。即使我通过" timeAdded"添加排序。或者一个ragne过滤器。
1)问题是当我引入第二个范围过滤器时,例如带有" salary"高于15美元,同时"评级"当我有N个范围过滤器时,有没有办法解决这个问题呢?
2)第二个问题是我不能使用逻辑OR。可以说,过滤作业,其中" jobCategory"是调酒师或服务员。
3)另一个问题是按字段过滤,字段可以有多于1的值,例如用户可以说多种语言。然后,如果我想过滤说英语的用户,那是不可能的。更不用说过滤说话的用户了英语或法语。
我知道我可以使用该语言作为字段名称来模拟数据,例如-english = true,但是当我为此引入范围过滤器时,我需要创建一个Firestore索引,这是非常的不方便,因为我可以同时拥有大约20种语言和大约50种工作类型,我将不得不使用不同的范围过滤器创建所有组合的索引..这个假设是正确的吗?
4)如何从某个位置过滤距离最远20公里的作业?半径和位置由用户选择。
5)如果我想同时过滤所有这些字段怎么办?例如。过滤某些" jobCategory",位置和半径,"薪水"高于某事和"评级"高于某事,然后通过" timeAdded"对它进行排序。
Firestore / Realtime数据库是否可以实现这一点,我可以通过某种方式对数据进行建模以支持这一点,还是我必须寻找替代的数据库解决方案?我非常喜欢它的实时方面。当应用程序实现聊天功能时,它会派上用场。云功能可以解决吗?我试图避免做多个请求,将它们合并在一起并将其发送到客户端,因为可以有任何过滤器组合。
如果Firebase不可行,您是否知道任何类似于Firestore的替代方案有更好的查询选项?我真的希望我错过了一些东西:)
谢谢!