在我的网站上,我正在进行类似测试
的调查,每个测试都有attendies
子集合,看起来像这样
当有人完成测试时,我也会将他们的 uid
添加到 completed
字段,就像我在框中绘制的那样。现在我想根据 status == completed
查询 tests
。
这是我尝试过的
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) 有什么方法可以根据子集合值查询热门集合? (这才是我真正想要的)
感谢任何帮助。
最佳答案
您可以改用一组对象(每个对象代表一个与会者)来跟踪所有已完成的与会者。数组在 firestore 中编入索引。
数组的数据结构为:
compeleted: [{}] = [
{id: string, points: number, status: string}
]
这可能不是最佳的数据库模型,具体取决于您要获取数据的方式和位置,但它会被索引并且您将能够查询它。我会考虑将积分和状态存储在出席者的子集合中。查看 firestore 中的分组集合查询——您可以在其中一次查询所有参加者子集合的新功能——对于具有特定 ID 且状态为完成的任何参加者,如果您想获取一名参加者完成的所有测试。
关于javascript - 如何使用 firestore 执行动态 where 查询并添加索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386762/