如何存储标记以获取良好的查询选项?

时间:2018-11-22 10:51:41

标签: firebase google-cloud-firestore

我有一个帖子集和一个用户集。帖子具有与此无关的某些属性,但是它们现在还具有一个名为tags的属性,它是一个包含某些单词的数组。

用户可以关注某些标签,因此他具有属性followedTags,该属性现在也是一个包含他所关注标签的数组。

现在,其中一个用例是一个用户Feed,该用户Feed仅显示他遵循的带有标签的帖子,问题是我只找到了一次(在数组中)一次查询一个属性的方法。由于我不想对1个Feed进行20个查询(例如,如果用户遵循20个标签),我想也许可以对数据模型本身进行明智的更改,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

问题是我只找到了一次查询一个属性(在数组中)的方法

如果您尝试链接多个whereArrayContains()方法,则很可能会出现以下错误:

  

原因:java.lang.IllegalArgumentException:无效的查询。查询仅支持具有单个包含数组的过滤器。

不幸的是,Firestore只能允许在查询中一次调用whereArrayContains()方法。

  

因为我不想对1个Feed进行20个查询(例如,如果用户关注20个标记)

如果您有合理的数字标签,则可以将每个标签创建为单独的属性。在这种情况下,可以多次调用Firestore Query的whereEqualTo()

如果不是这种情况,则应考虑通过在tagCollection中将每个标签创建为单独的对象(文档)来扩展数据库结构以允许反向查找。在每个文档下,您可以创建一个名为tagPost的新集合,在其中应添加所有带有特定标签标记的帖子。