如何在云端防火墙中查询用户之间的匹配?

时间:2018-02-05 08:44:06

标签: firebase google-cloud-firestore

我有以下收藏品

-likes (collection)
  -{uid} (document)
   {otheruserUID: true, anotherUID: true ...}
-likedBy (collection)
  -{uid} (document)
   {otheruserUID: true, anotherUID: true ...}

用户可以喜欢其他用户。我想要查询的是给用户,查询该用户的所有匹配。我应该查询整个喜欢和喜欢数据并在结果中运行匹配并产生匹配结果吗?有没有其他简单的方法来做到这一点?或者可能是更好的数据建模方法?

1 个答案:

答案 0 :(得分:2)

就个人而言,我只会有一个名为likes的集合。每个人都喜欢生成一个带有自动ID的新文档,其中包含3个字段:user(包含用户idname的对象),likedBy(对象)包含喜欢它们的用户idname)和timestamp(当他们喜欢的时候)。

您将能够执行以下查询:

// Find all users who liked likedUser, sorted by user
db.collection('likes').where('likedBy.name', '!=', null).where('user.id', '==', likedUser).orderBy('likedBy.name');

// Find all users who were liked by likedByUser, sorted by user
db.collection('likes').where('user.name', '!=', null).where('likedBy.id', '==', likedByUser).orderBy('user.name');

第一次运行这些查询时,您将收到错误消息,告诉您创建索引。此错误将包含为您创建索引的URL。

要使where有效,需要第一个orderBy,请参阅文档部分Range filter and orderBy on the same field