【发布时间】:2018-07-08 02:24:17
【问题描述】:
我需要为 Firestore 中的文档添加标签。
这些标签由管理员用户创建,每个Tag 都是Tags 集合中的一个文档。
然后将这些标签中的一个或多个应用于其他文档,例如 Item 文档。
然后,我们需要能够在 Items 中查询包含特定 Tag id 的那些,并具有其他范围过滤器 - 在范围内创建日期、按创建日期排序、用户 id 匹配特定用户等.
如何构造Item 标签数据以便查询?
- 无法查询 Array 属性,因此无法使用。
- 地图或集合必须预先编制索引,这也不能用作其动态数据。 1234563不支持...
-
我可以添加另一个包含一对多关系的集合
- 说
ItemTags,有{itemId, tagId},然后先查询它以获取Itemids 的列表,但同样,我如何使用该ids 列表来过滤Items集合?
- 说
我不想要这个客户端,因为数据会非常大。
更新:
标签是分层的,每个级别只能有一个标签。因此,一种可能的选择是在Item 上设置顶级字段:tag1、tag2、tag3 等具有预定义的限制。然后在创建Item 时,插入正确的标签级别,当查询它时,我们需要知道用户正在寻找哪个级别标签,然后我们可以查询item.tag1 = levelOneTag AND item.tag2 = levelTwoTag。
不理想,因为它限制了水平,但我很确定 10 会覆盖它。
【问题讨论】:
-
一般来说,对于 NoSQL 数据库,如果某个数据模型无法满足您的用例,请修改或扩充该模型,使其允许您的用例。当涉及到项目的分类时,您通常会得到一个反向“索引”:您可以在其中查找特定类别的项目(或项目 ID)的集合。另见stackoverflow.com/a/41528908 和stackoverflow.com/a/40657455。虽然两者都是为实时数据库编写的,但主体也适用于 Cloud Firestore。
-
我目前正在查看完全相同的用例?你有没有找到解决方案?
-
不,不是。最后我们只是映射了数据客户端,远非理想,但却是最合适的解决方案。
标签: firebase google-cloud-firestore