用时间和积分订购职位(像reddit)火店

问题描述 投票:0回答:1

我想为firebase firestore创建一个查询,让我得到 "最热 "的帖子。我希望这样的查询能和nodejs一起工作。

SELECT Title, LOG10(Likes + 1) * 86400 / .301029995663981 + UNIX_TIMESTAMP(Submitted) AS Hotness
FROM article
ORDER BY Hotness DESC

用firestore做这个查询的最好方法是什么?

这个查询的功劳。Reddit热度评分

javascript node.js firebase google-cloud-firestore
1个回答
1
投票

一种解决方案是在每个 post 的计算值。

每次更新一个post doc时,你都会更新这个字段。通过云功能 即从后端)。由于 Cloud Functions 代码是以管理员权限执行的,您可以编写一条安全规则,防止用户直接更新该字段(请参见 "安全规则")。文档),并且仍然由云函数更新该字段。

要进行计算,您需要点赞数(您应该有)和创建日期。

对于创建日期,只需要在创建文档的时候按照下面的方法来做就可以了。

....collection('posts').add({foo: 'bar', ..., createdOn: firebase.firestore.FieldValue.serverTimestamp()});

这样一来,你的查询就变成了一个非常简单的orderBy查询,请看Firestore。文档.

© www.soinside.com 2019 - 2024. All rights reserved.