好吧,所以我正在构建一个新的应用程序,并且使用GDPR和我选择使用UserID在顶层构建我的数据,因此删除用户的所有数据变得非常容易。
不幸的是,这意味着其他操作变得有点困难,但我希望通过firestore的数据结构可以解决我的问题。
我正在记录一系列签到,结构如下所示:checkins/{userid}/log/{checkin}
checkin对象包含一个space_id,它与另一个名为spaces的顶级集合相关联。
现在我想计算所选用户在所选空间中的签到次数,但我不知道如何让firebase查看所有用户ID /日志/签到并查找其中一个是space_id = x。
有没有一种简洁有效的方法来做到这一点?
答案 0 :(得分:1)
在我看来,这是Firestore的主要弱点之一。虽然文档强调它支持比firebase更复杂的数据结构,但仍然需要使用扁平数据方案来查询这些结构。
您要搜索的是所谓的收集组查询(请参阅Firestore query subcollections)
在您当前的设计中,您必须查询所有签到,然后在所有签入中查询空间ID。
在您的职位上,我会使用顶级结构,因为与临时操作相比,用户数据收集(GDPR)的过程可能很少。
答案 1 :(得分:0)
截至2019年5月,Firebase支持collection group queries。
在这种情况下,您可以编写:
db.collectionGroup('log')
.where('space_id', '==', '123')
.get()
.then(function (querySnapshot) {
console.log('Number of check-ins:', querySnapshot.size);
});