子集合中的firestore查询

时间:2018-05-04 07:49:27

标签: firebase google-cloud-firestore

好吧,所以我正在构建一个新的应用程序,并且使用GDPR和我选择使用UserID在顶层构建我的数据,因此删除用户的所有数据变得非常容易。

不幸的是,这意味着其他操作变得有点困难,但我希望通过firestore的数据结构可以解决我的问题。

我正在记录一系列签到,结构如下所示:checkins/{userid}/log/{checkin} checkin对象包含一个space_id,它与另一个名为spaces的顶级集合相关联。

现在我想计算所选用户在所选空间中的签到次数,但我不知道如何让firebase查看所有用户ID /日志/签到并查找其中一个是space_id = x。

有没有一种简洁有效的方法来做到这一点?

2 个答案:

答案 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);
  });