因此,我有userProject集合,其中包含projectId和userId。我通过使用获取某个特定用户的所有项目
query = db.Collection("userProject").Where("user_id","==",userId)
字符串
现在,我得到了相关用户的projectIds。但是由于可能有许多项目id(>30),所以我不能使用“in”操作符,如
query = db.Collection("project").Where("id","in",projectIds)
型
我能想到的一个解决方案是用这些id创建docRef
for _, id := range projectIds {
docRefs = append(docRefs, db.Collection("project").Doc(id))
}
型
然后使用
db.GetAll(context.Background(), docrefs)
型
但是我必须在那些特定的项目中使用过滤器和分页。所以我需要做一个查询,这样我以后就可以在同一个查询中使用StartAfter
,Limit
和Where
。我怎么能做到这一点,在firestore与golang?
1条答案
按热度按时间y53ybaqx1#
使用当前的模式,您尝试做的事情是不可能的(对一个大的已知项列表进行分页)。
最简单的做法是将用户id复制到projects集合中的文档中,然后只查询该集合对用户id的过滤。像这样的复制数据(去规范化)在nosql类型的数据库中非常常见,以便实现更有效的查询。