首页 > 解决方案 > 在 firebase 查询中使用 2 个 order 参数,但结果不是由它们中的任何一个排序的

问题描述

我有以下查询

admin.firestore()
    .collection("articles")
    .orderBy("publishDate", "desc")
    .where("publishDate", ">=", mintime)
    .orderBy("views", "desc")
    .limit(10);

查询给出了一周内按浏览量排序的前 10 篇文章我没有错误,但结果文章不一定是浏览次数最高的文章。小备注返回的 10 篇文章也没有排序,为了解决这个问题,我只是在从 firebase 获取它们后对 10 篇文章进行了排序,但这让我觉得我做错了什么。那么有没有办法修复这个查询以可靠地获取某个日期内的热门文章并按视图排序?

编辑

我将尝试对这个查询进行一些不同的解释:

admin.firestore()
    .collection("articles")
    .orderBy("publishDate", "desc")
    .where("publishDate", ">=", mintime)
    .orderBy("views", "desc")
    .limit(10);

而这个查询

admin.firestore()
    .collection("articles")
    .orderBy("publishDate", "desc")
    .where("publishDate", ">=", mintime)
    .limit(10);

返回相同的结果,就像.orderBy("views", "desc")被忽略了,我该如何解决这个问题?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


返回的 10 篇文章也没有排序,为了解决这个问题,我只是在从 firebase 获取它们后对 10 篇文章进行了排序

这正是您必须做的,鉴于您现在的查询,没有任何解决方法可以让 Firestore 为您执行此操作。

二级 orderBy 不会再次对整个结果集重新排序。它只是对由主要排序值聚集的值内的文档进行排序。文档中的示例涵盖了此行为。查找显示“您也可以按多个字段排序”的部分。


推荐阅读