有没有办法可以将 GeoFireStore 查询与普通 Firestore 查询结合起来?

2023-12-02

我想查询我存储在名为“Users”的集合中的用户。每个用户都有年龄和体重等字段。有没有办法可以通过距使用 GeoFire 运行搜索的用户的距离来查询用户,并将其与 FireStore 搜索查询结合起来?例如,我是一名用户,正在寻找 20 英里半径内的人,但也想找到比自己小 2 岁或年长 2 岁的人。


Firestore 数据库可以对多个字段进行过滤,但只能对其中一个字段进行范围过滤。所以这个查询是可能的:

collection.where("age", ">", 18).where("age", "<", 20)

但这是不可能的:

// !!!THIS WON'T WORK!!!
collection.where("latitude", ">", 18.001).where("longitude", "<", 21.312)

据我所知,GeoFirestore 库都使用 geohashes(如原始 GeoFire 库中使用的那样)来完成一些在底层数据库上看似不可能的事情:根据纬度过滤地理范围内的文档and经度。

Geohashes 通过将位置的纬度和经度组合成单个字符串值来发挥其魔力,该字符串值可以以不同的精度进行过滤。这是可能的,因为您可以(在某种程度上)表达一个经度与一个纬度的关系。因此,您可以将纬度和经度的数字合并为一个值,该值具有每个值的最高有效数字。

现在,这也解释了为什么您不能简单地向地理查询添加另一个范围过滤器。你必须找到一种方法来用距离来表达年龄差异。如果你能做到这一点,那么“只需”将额外信息编码到地理年龄哈希中即可。对我来说这听起来很复杂,但至少是可能的。

第一个问题是,没有通用的方法将其他属性与纬度和经度相关联,这就是为什么您需要自己解决这个问题。我的直觉是,大多数开发人员放弃了这一要求,或者在客户端进行额外的排序/过滤。

如果您想向 geohash 添加相等过滤器(例如,特定地理范围内正好 18 岁的人的文档),这在 Firestore 级别上绝对是可能的,尽管我不知道 GeoFirestore 库是否公开了底层查询有能力做到这一点。

我强烈建议您更多地了解这个主题,因为它非常有趣。一些来源:

  • 如果您想详细了解为什么 Firestore 只能对单个字段进行范围过滤,请观看该视频来自“了解 Cloud Firestore”系列.
  • 如果您想了解更多geohashes、geoqueries 以及如何在 Firestore 上实现它们观看我关于该主题的演讲。
  • 维基百科的解释是地理哈希.

我还建议您查看之前有关该主题的问题:

  • 使用 Geofire + Firebase 过滤结果
  • 如何使用 geofire 进行复杂查询?
  • 我可以在单个查询中使用带有优先级的 firebase 的 GeoFire 吗?

其中许多都是关于(原始)Firebase 实时数据库的 GeoFire,但相同的原则也适用于 Firestore。

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

有没有办法可以将 GeoFireStore 查询与普通 Firestore 查询结合起来? 的相关文章

随机推荐

  • 用户提交的 HTML 带来的安全风险

    我正在使用 contentEditable div 它允许用户编辑正文 HTML 然后使用 AJAX 请求将其直接发布到网站 当然 我还要对其进行一些安全检查 最明显的是通过搜索确保没有提交任何脚本标签
  • 如何修复 Eclipse/Android 安装?图形 XML 编辑器中的 PNG 加载问题

    很长一段时间以来 我的带有 Android 插件的 Eclipse 环境都运行顺利 在软件更新过程中应用的更新的某个地方 它崩溃了 开始发生的第一个问题是在运行布局文件的 Android 插件图形编辑器时丢失 按钮 Form Widget
  • 如何访问 R 中的嵌套 SQL 表?

    来自 R Studio 的ODBC 数据库文档我可以看到一个如何将 SQL 表读入 R 数据框的简单示例 data lt dbReadTable con flights 让我粘贴一个图形BGBUreftable 我正在尝试读取 R 数据帧
  • 将ScheduledJob注册为系统帐户(无需传入凭据)

    我相信对于Register ScheduledTask你可以指定 User System 或者做类似的事情 principal New ScheduledTaskPrincipal UserId SYSTEM LogonType Servi
  • 通过递增/递减最后找到的值向前/向后填充 na?

    给定以下 pandas 数据框 可以找到它的副本here 如何在单独的列中填充 na 并递增 递减 nr 行 直到下一个信号值和前向 后向信号值 信号值只有 1 1 或 np na Values Signal 0 1420 49 1 142
  • 使用 Javascript forEach 和 indexOf 在 JSON 中搜索多个过滤器

    我有 JSON 格式的数据 需要在其中执行搜索 有不同的可用标签 当我单击它们时 它会在 JSON 中搜索并返回具有这些标签的项目 为此 我使用了 js 函数 它第一次工作正常 但是当我在函数中推送第二个过滤器时 它返回错误的数据 可用的过
  • RFC_READ_TABLE 传递“选项”和“字段”参数 (c#)

    需要帮助 我正在尝试使用 RFC READ TABLE 从 SAP 获取销售数据 但不知道如何将 OPTIONS 和 FIELDS 参数传递给 SAP 这是我的应用程序的示例代码 连接正常 执行后出现异常 DATA BUFFER EXCEE
  • 有没有办法防止opencv矩阵除法的舍入

    我有一个整数矩阵 我想对其进行整数除法 但opencv总是对结果进行四舍五入 我知道我可以手动划分每个元素 但我想知道是否有更好的方法 Mat c Mat
  • TCP Keepalive 是确定断开链接的唯一机制吗?

    我最近遇到了一个问题 TCP 服务器和客户端之间的中间链路出现故障 如果主服务器宕机 客户端需要连接到辅助服务器 当主服务器被关闭时 例如 通过在终端上执行 C TCP 关闭序列会通过 并且客户端成功检测到断开的链接并尝试辅助服务器 然而
  • Tomcat 7 上部署时出现 Omnifaces 异常

    我正在尝试将 Omnifaces 2 1 添加到 Web 应用程序以使用 FullAjaxExceptionHandler 以及 Omnifaces 2 1 中可能的其他功能 我已阅读并关注了 BallusC 的以下帖子 但仍然陷入困境 如
  • 格式良好的 XML?标记名称和属性名称中的 XML 引用

    我一直在尝试确认我对 XML 规范的阅读 我的解释是 标签名称和属性名称中不允许使用预定义实体和数字字符引用 例如 XML 1 0 规范不允许这样做
  • MS Edge:IntersectionObserver。对你起作用吗?

    在任何人在这里付出太多努力之前 我已经有了一个令人讨厌的解决方法 我只是想知道是否有人可以使用它 Edge 版本 15 现已发布 并支持交叉观察器 用于延迟加载 我已经实现了它 它在所有支持它的浏览器中都可以正常工作 Chrome 和 Op
  • Rails 随机记录生成器

    我问自己是否有一个gem或一种方法可以用随机数据生成大量记录 对模型有效 目标是使用数据库中的大量数据来测试我的应用程序 我在网上没有找到任何内容 但我没有使用正确的关键字 你知道类似的事情吗 您可以使用Faker宝石 并且 以下是创建 1
  • 如何将查询语句记录到Neo4j服务器,可能吗?

    我想将整个查询语句记录到 Neo4j 服务器 但是 在搜索 SO 和文档之后我没有成功 我发现这个问题 Neo4j 服务器上记录的剩余查询 但是更改这些配置设置并没有达到我所希望的效果 我在 Golang 工作并使用Go CQ库与 Neo4
  • 如何让 Twitter Bootstrap Accordion 保持一组开放?

    我正在尝试使用 Twitter 引导程序使用手风琴和折叠插件来模拟 Outlook 栏 到目前为止 我已经实现了折叠和手风琴工作 但它目前允许折叠所有部分 我想限制它 以便始终显示一个且仅一个 这是我正在研究的一个 http jsfiddl
  • 用于在 JSON 数组中查找元素的索引

    我有一个看起来像这样的表 CREATE TABLE tracks id SERIAL artists JSON INSERT INTO tracks id artists VALUES 1 name blink 182 INSERT INT
  • 我是否正确解析此 HTTP POST 请求?

    首先我要说的是 我正在使用twisted web框架 Twisted web的文件上传没有像我想要的那样工作 它只包含文件数据 而不包含任何其他信息 cgi parse multipart没有像我想要的那样工作 同样的事情 twisted
  • 如何从Android中的普通java类调用Activity类[重复]

    这个问题在这里已经有答案了 我有一个 noraml java 类 在该类的构造函数中称为 ReceivedChat java 我想调用 Android 的 Activity public class ReceivedChat String
  • Grid.MVC 与 ASP.NET MVC 5 兼容吗?

    在我开始搞乱一些不起作用的东西之前 Grid MVC 可以与 ASP NET MVC 5 一起使用吗 在 gridmvc codeplex com 上他们只写 MVC3 4 但我想知道是否有人尝试过 MVC5 你尝试过 但没有成功 试试这个
  • 有没有办法可以将 GeoFireStore 查询与普通 Firestore 查询结合起来?

    我想查询我存储在名为 Users 的集合中的用户 每个用户都有年龄和体重等字段 有没有办法可以通过距使用 GeoFire 运行搜索的用户的距离来查询用户 并将其与 FireStore 搜索查询结合起来 例如 我是一名用户 正在寻找 20 英