如何在Firestore中按多个计算值查询订购文档?

时间:2020-09-07 10:25:46

标签: firebase google-cloud-firestore

让我们让我的文档包含两个字段“ likeCount”和“ viewCount”。是否可以通过这两个字段的总和对其排序?

如果没有,如何按受欢迎程度实施订购?在许多应用中,按受欢迎程度排序是一项常见功能,但我找不到与此相关的任何文档或教程。

1 个答案:

答案 0 :(得分:2)

一种解决方案是在每个文档中都有一个额外字段,用于保存总和的值。然后,您可以轻松地基于此值进行排序。

要更新此字段,如果您在更新文档时未在应用程序中获取信息(即文档),则可以在从应用程序中更新文档时进行操作。需要获取文档以获取两个字段的值),您可以使用Cloud Function在后端更新值。

例如,遵循以下几行的Cloud Function就可以解决问题:

exports.updateGlobalCount = functions.firestore
    .document('collection/{docId}')
    .onUpdate((change, context) => {

        const previousValue = change.before.data();
        const newValue = change.after.data();

        if (previousValue.likeCount !== newValue.likeCount || previousValue.viewCount !== newValue.viewCount) {     
            return change.after.ref.update({ globalCount: newValue.likeCount + newValue.viewCount })
        } else {
            return null;
        }
    });