过滤最新的重复Firebase文档

时间:2018-11-03 17:03:42

标签: firebase google-cloud-firestore

我正在使用使用Firebase数据库的Angle 6应用程序。我想知道如何根据特定字段(仅最新字段)过滤唯一记录的文档列表。

例如,我有一组看起来像这样的邀请:

{
    name: ‘Joe Shmoe’,
    email: ‘jshmoe@gmail.com'
    InvitedOn: ‘Sat Nov 3 2018 12:00PM’
}

每个人都可以被邀请多次,因此集合中可能包含多个对Joe Schmoe的邀请,但是对于InvitedOn属性,他们都有不同的日期/时间。

我想做的是:

  • 通过电子邮件将文档分组。
  • 对于每个组,按邀请日期排序。
  • 通过接收最新邀请来删除重复的邀请。

我对Firebase不够熟悉,不知道该怎么做。我正在像我说的那样使用角度6,所以如果有人可以用typescript / javascript来解释如何做到这一点,或者将我定向到一个很好的网站对此进行解释,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

首先通过测试(查询)数据库的存在来防止重复。如果已经存在,请更新现有内容,而不是编写一条新记录。

与Firebase实时数据库相比,Firestore提供了更好的复合查询功能。除非您有理由不使用,否则请使用Firestore。

读取和删除(删除)彼此不同。仅仅因为您读取了最近的记录并不意味着该记录已从数据库中删除,您也必须将其删除(如果您要这样做)。

因此,答案是切换到Firestore,不要记录重复的数据,最后将时间戳记存储为Date.now()时间戳记,以便使用简单的数字比较进行搜索。

答案 1 :(得分:0)

听起来您想显示一封电子邮件地址列表,其中包含邀请他们的最新日期。如果这是您的需要,我建议您在数据库中进行精确建模。假设使用Cloud Firestore,它看起来像:

emails_with_invites (collection)
  jshmoe@gmail.com (document id)
    lastInvitedOn: ‘Sat Nov 3 2018 12:00PM’

使用这样的集合,电子邮件地址将自动唯一(您的“分组依据”要求),并且您将自动获得上次邀请日期。这样做的代价是,每次发出邀请时,您都必须更新此附加收藏集。您可以在应用程序代码本身中执行此操作,也可以使用Cloud Functions。