查找给定查询的 firestore 文档的索引

2024-01-06

我正在使用 Firestore 构建游戏,我想显示高分列表。

我目前通过以下查询获得了 10 个最高分:

const q = query(doc(db, "scores", title), orderBy("score", "desc"), limit(10));

除此之外,我想让玩家知道他们与全球高分相比的表现如何。例如,如果他们获得了第 956 名最高分,我希望他们知道他们的相对位置是 956。

我已经看到了,对于cursors https://firebase.google.com/docs/firestore/query-data/query-cursors,可以提供给定文档的偏移量,即:

const q = query(doc(db, "scores", title), orderBy("score", "desc"), limit(10), startAt(myScoreDocRef));

有没有办法从中获取分数在排序结果集中的逻辑索引?


最近添加了 FirestoregetCountFromServer() https://firebase.google.com/support/release-notes/js#version_9110_-_october_06_2022 (API参考 https://firebase.google.com/docs/reference/js/firestore_.md#getcountfromserver) 函数非常适合此用例。您可以创建一个查询来匹配分数大于当前用户分数的文档并获取计数,如下所示:

const currentUserScore = 24;

const q = query(
  collection(db, 'users'),
  orderBy('score', 'desc'),
  where('score', '>', currentUserScore)
)

// number of users with higher score
const snapshot = await getCountFromServer(q)
console.log(`Your rank: ${snapshot.data().count + 1}`)

但是,如果多个用户具有相同的分数,他们都会在该查询中看到相同的排名。作为解决方法,除了分数之外,您还可以向排名添加另一个参数,例如查询具有相同分数的用户并检查用户年龄等。

对于每批最多 1000 个与查询匹配的索引条目,计数查询只需读取 1 次(根据文档 https://firebase.google.com/docs/firestore/pricing#aggregation_queries)所以它比查询具有一定偏移量的用户并手动计算排名要高效得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找给定查询的 firestore 文档的索引 的相关文章

随机推荐

  • 动态设置google api key

    我有一个应用程序想要嵌入谷歌地图 并且需要将密钥放入配置文件中 所以这就是我所做的 在config js中 GOOGLE MAP KEY mykeyofgoogleapi 在index html中 问题是我看到谷歌的 GET URL 只是
  • 函数返回后,函数中分配的内存是否仍然保持分配状态?

    对于下面的代码 1 main 调用函数 f1 2 函数 f1 进行一些数字运算 使用 malloc 创建一个 char 数组 然后将数组的指针返回到 main 不取消分配 释放 数组 我有3个与此案相关的问题 1 我假设 虽然函数 f1 已
  • Windows 中的历史夏令时

    Windows 中是否有一种简单的方法 使用 Delphi 而不是 NET 将 UTC 时间转换为本地时间 并进行夏令时调整 数据可以追溯到 12 年前 因此需要考虑这段时间内 DST 开始 结束日期的变化 有趣的是 昨天 LinkedIn
  • 如何查看输入流中的前两个字节?

    应该很简单 我有一个输入流 我想在其中查看 而不是读取 前两个字节 即我希望输入流的 当前位置 在我查看后仍然为 0 最好和最安全的方法是什么 Answer 正如我所怀疑的 解决方案是将其包装在提供可标记性的 BufferedInputSt
  • 项目版本设置不断恢复

    我在 Delphi 10 1 Berlin 有一个简单的项目 在项目设置中 我曾一度选中 预发布 现在我有两件事 无论我改变多少次 我回来后都没有保存 这些都是 预发布复选框 再次重新检查 模块版本Release数量 变化自0 to 1 请
  • 底部的选项卡栏带有 MonoTouch.Dialog?

    MonoTouch 和 MonoTouch Dialog 的新手 但我确信可以创建一个选项卡栏或按钮栏或您想要的名称 iPhone 底部带有图标 按钮的黑色栏 问题是如何使用 MonoTouch Dialog 做到这一点 谢谢你的帮助 下面
  • 为什么我的 MVC 5 应用程序尝试访问本地数据库

    我一直在本地计算机上开发 MVC 5 应用程序 并且刚刚尝试向 Azure 公开测试版本 我发现了这个新错误 我的连接字符串没有对 LocalDB 的引用 并且我在代码中找不到任何想要创建或访问 LocalDB 的内容 然而 我收到与尝试创
  • 分段错误:11 - 模块交叉引用

    我正在尝试通过模块交叉引用来解决分段错误 不知道如何进行这项工作 部分错误如下 1 While reading from Users damiandudycz Library Developer Xcode DerivedData Hypn
  • 加快“导航抽屉”关闭时的动画速度?

    已实现并按预期工作 因此确实没有值得在此发布的代码 只是想看看是否有人有加快抽屉打开和关闭时间的经验 例如 YouTube 应用程序要快得多 您绝对可以调整动画的持续时间 但这需要您从支持库中复制类 然后进行相应的编辑 视图拖拽助手 持续时
  • Go 中的递归锁定

    Go s sync包有一个Mutex 不幸的是它不是递归的 在 Go 中实现递归锁的最佳方法是什么 很抱歉没有直接回答你的问题 恕我直言 在 Go 中实现递归锁的最佳方法是不实现它们 而是重新设计代码 使其一开始就不需要它们 我认为 对它们
  • urllib3 最大重试错误

    我刚刚开始使用 urllib3 马上就遇到了问题 根据他们的手册 我从一个简单的例子开始 Python 2 7 1 r271 86832 Apr 11 2011 18 13 53 GCC 4 5 2 on linux2 Type help
  • 如何使用 TabItem 名称参数调用 XAML 中的绑定方法?

    我有一个在 XAML 中绑定的对象实例 它有一个方法 将返回给我其他对象的列表 根据我传递给此方法的属性值 它将返回具有该属性值的所有对象
  • 限制对 NodeJS 中 API 的并发请求以及 Async/Await

    我在用Request https www npmjs com package request打包在我的 Nodejs 项目中异步 等待中引入的函数节点 V 8 x要使用第 3 方 API 一切都很好 直到我遇到 API 提供商的限制 who
  • 如何获取列表中所有 NaN 的所有索引?

    我正在尝试制作一个包含所有索引的列表NaNs在列表中a 问题是这个列表ind没有填充任何东西 它有效 如果不是NaN 我放了一个随机字符串 例如c import numpy as np a 1 2 3 4 np nan np nan 2 n
  • 在运行时启用和禁用 gprof?

    我想知道里面有没有APIgprof通过受监控的应用程序在运行时启用和禁用分析 我有兴趣禁用对代码某些部分的分析 并使其能够专注于我感兴趣的部分 我的意思是 有没有办法避免这样做 int main void disable gprof uni
  • 从图像中删除颜色

    我想从下图中删除颜色 由于这种颜色 我无法从图像中清晰地提取文本 我正在使用下面的代码 但我没有得到明确的文本 import numpy as np from PIL import Image im Image open my file t
  • 如何在Linux中用户登录认证后运行脚本

    我有一个脚本 我想在用户登录身份验证后运行 为了实现这一点 我将脚本名称添加到 etc rc5 d S rc local文件 但后来我知道 rc local 文件中添加的任何内容都会在系统启动时执行 而不是在登录身份验证之后执行 谁能告诉我
  • 错误:没有名为“PyQt5.QtMultimedia”的模块

    我正在尝试构建一个集成视频的 GUI 为此我需要导入 PyQt5 QtMultimedia 然而 当尝试导入模块 导入 PyQt5 QtMultimedia 时 我收到错误 ModuleNotFoundError 没有名为 PyQt5 Qt
  • 使用 node.js 运行 shell 脚本(childProcess)

    我想在我的 node js 服务器上运行 shell 脚本 但什么也没发生 childProcess exec play sh media external req params movie function not working 另一个
  • 查找给定查询的 firestore 文档的索引

    我正在使用 Firestore 构建游戏 我想显示高分列表 我目前通过以下查询获得了 10 个最高分 const q query doc db scores title orderBy score desc limit 10 除此之外 我想