javascript - Firestore如何查询趋势文档的帖子集合还是我应该使用数据聚合
问题描述
我正在尝试在我的应用程序上创建一个趋势页面。我希望根据帖子的点赞数和帖子的新近程度来发布热门帖子。最近有更多喜欢的人将把它排在第一位。我想要这样的东西:
let startDate = moment();
startDate.subtract(3, "days");
snapshot = await db
.collection("/vents/")
.where("server_timestamp", ">", startDate.valueOf())
.orderBy("like_counter")
.limit(10)
.get();
这显然不起作用,因为您只能 orderBy 与 where 子句相同的字段。有人知道怎么做这个吗?如果我必须使用数据聚合在帖子上创建一个趋势属性,我可以这样做,但它会需要很多代码,而且把所有这些都写出来会有点糟糕。
如果我必须在这里使用数据聚合,我大概会这样做。对于数据库中的每条评论和点赞,我会设置一个监听器,以根据收到的新点赞或评论以及帖子的发布时间来增加或减少趋势属性。我还需要一个 pubscheduler 来浏览所有帖子并至少每天更新一次以更新趋势分数属性,即使该帖子没有收到喜欢或评论。我还可以每天一次拉出前 20 个热门帖子,而不是所有帖子,然后只更新这些帖子,因为数据库中没有趋势的其他帖子可能不需要更新。
请让我知道您是否应该为此使用数据聚合,或者是否应该构建我的查询。
解决方案
查看您正在编写的代码,您需要 orderBy 与 where 子句相同的字段,但如果您有一个带有范围比较(<、<=、>、>=)的过滤器,您的第一个排序必须在同一个字段上,棘手的是您可以使用多个 orderBy。我所说的一个例子可能是:
let startDate = moment();
startDate.subtract(3, "days");
snapshot = await db
.collection("/vents/")
.where("server_timestamp", ">", startDate.valueOf())
.orderBy("server_timestamp")
.orderBy("like_counter")
.limit(10)
.get();
我使用此文档来获取我与您共享的代码。
推荐阅读
- python - 'BinaryExpression' 对象和 'Comparator' 对象都没有属性 'days'
- google-apps-script - 如何将(PDF,二进制)文件从 GAS Web 服务到浏览器?
- javascript - 使用 html2Canvas 创建下载 png 时出现以下错误
- javascript - 从特定索引处的现有数组创建一个新数组
- python-3.x - 从 tkinter.Text 获取输入并打印结果
- php - 这是什么字符串格式?我如何解码
- python - (运行的干净代码)根据来自另一个数据帧的日期间隔和字符串条件获取一个数据帧中的值的平均值
- python - 如何在python中将任何月份设置为第一个月?
- python - 在 json 文件中追加到列表的最佳和最快方法是什么?
- sql - 什么是正确的sql来获得否。个别组的学生?