Firestore确定某个日期范围内的数据字段值性能,并将其与其他字段值组合



我想要以下数据结果:给我所有电影,其中类型等于给定类型,比较过去30天所有电影的watchcount值,并给我看这段时间内最受关注的电影desc

这对我来说是一个相当高级的要求,经过研究,我仍然没有找到一个明智的解决方案。我很想看到一个解决方案,如何在消防商店内完成这种方法。

我有自己收藏的所有电影。如果客户确实观看了这部电影,我会增加这部电影的一个名为totalWatchCount的字段值。

例如,我想放映30天以来最受关注的电影,但我脑海中没有智能的数据结构来了解如何在这段时间内获得表现。例如,我只能收到创世纪以来收视率最高的电影。

我必须比较所有的电影,确定给定时期之间的表现,并过滤掉这些结果,但我不知道结构必须是什么样子。

这就是我现在接收数据的方式:

snapshot = await db
.collection('films')
.where('genre', arrayContainsAny: userGenres)
.where('dateFilter.year', isEqualTo: '21')
.where('dateFilter.month', isEqualTo: 'MAR')
.where('dateFilter.week', isEqualTo: '2')
.orderBy('totalWatchCount', descending: true)
.limit(5)
.get()
.catchError((error) => print(error));
snapshot.docs.forEach((document) {
Film film = Film.fromJson(document.data());
_res.add(film);
});
}

我无法比较给定时段(例如30天(内的所有电影观看次数,因为我只能访问总次数,而不能访问其间的总次数,无法将其与其他影片进行比较

我们怎样才能做到这一点?

您可以创建一个数组,其中包含作为关键字的日期和作为值的视图计数,反之亦然。

每次编写视图事件时,都要检查当前日期是否已存在于数组中,如果已存在,则覆盖它。

你可以在本月的第#天这样做。开始于1,结束于29,30,31等

示例:

[ 01-04: 100, 02-04: 50, 03-04: 120 ]

因此,如果我在数据库中添加另一个查看器事件,我会:

  • 检查四月的日期"1"是否存在,如果不存在则创建
  • 如果当前日期是01-05,我会用01-04:1覆盖此条目
  • 如果当前日期是01-04,我们只需将100增加1到101

为了更容易解析,您可以添加时间戳作为关键字。

通过这种方式,您可以使用where来测量上个月的最大天数间隔。

最新更新