首页 > 解决方案 > 阵列中的 Firestore 地理点

问题描述

我正在处理一个有趣的场景,我不确定它是否可以工作,或者是否会很好地工作。在我目前的项目中,我试图找到一种在 Firestore 中使用地理点的有效方法。文档可以包含geopoints字段的直接方法非常不言自明且易于查询。但是,我必须为单个文档(文章)处理不同数量的地理点。这样做的原因是因为可能需要在多个地理区域中提供特定的内容。

例如,一篇文章可能需要仅在纽约、丹佛和西雅图可用。一般来说,如果我只希望这篇文章在西雅图可用,那么为每个位置使用一个地理点并按半径搜索是一项非常标准的任务,但现在它需要在另外两个地方可用。

我目前看到的解决方案是使用一个数组并用地理点填充它。结构看起来像这样:

articleText (String),
sortTime (Timestamp),
tags (Array)
 - ['tagA','tagB','tagC','tagD'],
availableLocations (Array)
 - [(Geopoint), (Geopoint), (Geopoint), (Geopoint)]

然后执行查询以获取从特定 postTime 开始的特定 Geopoint 10 英里范围内的所有内容。

我不知道将地理点放在数组中是否效果很好,或者应该避免使用其他数据结构。

我考虑过为每个地理点复制一篇文章文档,但如果需要定义多个位置,则扩展性不佳。我还考虑过创建一个“参考”集合,其中每个点都是一个包含文章的 documentID 的文档,但这会导致读取每个参考文档,然后再读取实际文档。本质上,一个内容需要读取两个文档,根据 Firestore 定价模型,这可能会变得昂贵,并且可能会不必要地减慢速度。

我是否以可接受的方式处理这个问题?还有其他方法可以更有效地工作吗?

标签: google-cloud-firestore

解决方案


推荐阅读