Firestore / Realtime数据库中的复杂查询和用于查询的建模

时间:2018-05-01 02:42:52

标签: firebase firebase-realtime-database google-cloud-firestore querying

我在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的替代方案有更好的查询选项?我真的希望我错过了一些东西:)

谢谢!

0 个答案:

没有答案