在我的网站中,我正在进行类似tests
的调查,每个测试都有attendies
子集合,如下所示
当有人完成测试时,我也会将uid
添加到completed
字段,就像我在框中绘制的那样。现在,我想根据tests
查询status == completed
。
这是我试过的
this.completedModulesRef$ = this.afs.collection('tests', ref =>
ref.orderBy('moduleNum', 'desc')
.where('completed.'+auth.uid+'.status','==','completed'));
this.completedModules$ = this.completedModulesRef$.valueChanges();
然后firestore要我添加索引,当我按照生成的链接添加索引时我得到了这个
它指向completed.CurrentUserId.status
。我相信这只适用于当前用户。
我有几个问题
1).where('completed.'+auth.uid+'.status','==','completed')
这是一个有效的查询吗?
2)如果是,我怎么能索引它?
3)根据子集合值查询顶级集合的任何方法? (这就是我真正想要的)
任何帮助表示感谢。
答案 0 :(得分:0)
您可以改为使用一组对象(每个对象代表一个与会者)来跟踪所有已完成的与会者。数组在Firestore中建立索引。
该数组的数据结构为:
compeleted: [{}] = [
{id: string, points: number, status: string}
]
根据要获取数据的方式和位置,这可能不是最理想的数据库模型,但是它将被索引并且可以查询它。我会考虑将积分和状态存储在与会者的子集合中。看看firestore中的分组集合查询-一种新功能,您可以一次在所有出席者子集合中查询-如果要获取一个参加者完成的所有测试,则具有特定ID且状态为完成的任何参加者。