文档菜单
文档首页
/
MongoDB 手册
/ / /

geoSearch

本页内容

  • 兼容性
  • 行为
  • 示例
geoSearch

重要

在MongoDB 5.0中已移除

MongoDB 5.0移除了已弃用的geoHaystack索引和geoSearch命令。请使用2d索引$geoNear或支持的地理空间查询运算符代替。

将MongoDB实例升级到5.0并将featureCompatibilityVersion设置为5.0将删除任何现有的geoHaystack索引。

geoSearch命令提供了访问MongoDB的haystack索引功能的一个接口。这些索引在根据某些其他查询(即“草堆”)收集结果后,根据位置坐标返回结果时非常有用。

geoSearch命令接受一个包含以下字段的文档。

字段
类型
描述
geoSearch
string
要查询的集合。
search
document
用于过滤文档的查询。
near
array
一个点的坐标。
maxDistance
number
可选。从指定点起的最大距离。
limit
number
可选。返回的文档的最大数量。
readConcern
document

可选。指定读取关注点

readConcern选项的语法如下:readConcern: { level: <value> }

可能的读取关注点级别如下

  • "local"。这是针对主节点和副本节点的读取操作默认的读取关注点级别。

  • "available"。可用于针对主节点和副本节点的读取操作。"available"在主节点和非分片副本节点上与"local"行为相同。查询返回实例的最新数据。

  • "majority"。可用于使用WiredTiger存储引擎的副本集。

  • "可线性化"。仅适用于主节点的读取操作。

有关读取关注级别更多信息,请参阅读取关注级别。

有关读取关注级别更多信息,请参阅读取关注级别。

注释
任何

可选。用户提供的用于此命令的注释。一旦设置,此注释将出现在以下位置的此命令记录旁边

注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。

此命令可在以下环境中的部署中使用

重要

此命令不支持无服务器实例。更多信息,请参阅不支持命令。

除非另有说明,否则默认情况下,geoSearch 命令将结果限制为50个文档。

geoSearch 不支持分片集群。

geoSearch 可以在 分布式事务 中使用。

重要

在大多数情况下,分布式事务相较于单文档写入,会带来更高的性能成本,分布式事务的可用性不应替代有效的模式设计。对于许多场景,非规范化数据模型(嵌入文档和数组) 仍然是最适合您的数据和用例的。也就是说,在许多场景中,适当的数据建模将最大限度地减少分布式事务的需求。

有关事务使用的其他考虑因素(例如运行时限制和oplog大小限制),请参阅生产注意事项。

考虑以下示例

db.runCommand({
geoSearch : "places",
near: [ -73.9667, 40.78 ],
maxDistance : 6,
search : { type : "restaurant" },
limit : 30
})

上述命令返回所有在 places 集合中,坐标 [ -73.9667, 40.78 ] 最多距离 6 个单位的 typerestaurant 的文档,最多返回 30 个结果。

要覆盖 "local" 的默认读取关注度级别,请使用 readConcern 选项。

以下对副本集的操作指定了 读取关注度"majority",以读取已确认写入多数节点的最新数据副本。

注意

无论读取关注度级别如何,节点上的最新数据可能不会反映系统中的最新数据版本。

db.runCommand(
{
geoSearch: "places",
near: [ -73.9667, 40.78 ],
search : { type : "restaurant" },
readConcern: { level: "majority" }
}
)

为确保单个线程可以读取其自身的写入,请使用 "majority" 读取关注度和对副本集主节点的 "majority" 写入关注度。

返回

地理空间