我有一个帖子集和一个用户集。帖子具有与此无关的某些属性,但是它们现在还具有一个名为tags
的属性,它是一个包含某些单词的数组。
用户可以关注某些标签,因此他具有属性followedTags
,该属性现在也是一个包含他所关注标签的数组。
现在,其中一个用例是一个用户Feed,该用户Feed仅显示他遵循的带有标签的帖子,问题是我只找到了一次(在数组中)一次查询一个属性的方法。由于我不想对1个Feed进行20个查询(例如,如果用户遵循20个标签),我想也许可以对数据模型本身进行明智的更改,有什么建议吗?
答案 0 :(得分:1)
问题是我只找到了一次查询一个属性(在数组中)的方法
如果您尝试链接多个whereArrayContains()
方法,则很可能会出现以下错误:
原因:java.lang.IllegalArgumentException:无效的查询。查询仅支持具有单个包含数组的过滤器。
不幸的是,Firestore只能仅允许在查询中一次调用whereArrayContains()
方法。
因为我不想对1个Feed进行20个查询(例如,如果用户关注20个标记)
如果您有合理的数字标签,则可以将每个标签创建为单独的属性。在这种情况下,可以多次调用Firestore Query的whereEqualTo()。
如果不是这种情况,则应考虑通过在tagCollection
中将每个标签创建为单独的对象(文档)来扩展数据库结构以允许反向查找。在每个文档下,您可以创建一个名为tagPost
的新集合,在其中应添加所有带有特定标签标记的帖子。