geoSearch
geoSearch
重要
在MongoDB 5.0中已移除
该
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存储引擎的副本集。"可线性化"
。仅适用于主节点的读取操作。
有关读取关注级别更多信息,请参阅读取关注级别。
有关读取关注级别更多信息,请参阅读取关注级别。
注释
任何可选。用户提供的用于此命令的注释。一旦设置,此注释将出现在以下位置的此命令记录旁边
mongod日志消息,在
attr.command.cursor.comment
字段。数据库分析器输出,在
command.comment
字段。currentOp
输出,在command.comment
字段。
注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。
兼容性
此命令可在以下环境中的部署中使用
MongoDB Atlas:云中MongoDB部署的全托管服务
重要
此命令不支持无服务器实例。更多信息,请参阅不支持命令。
MongoDB Enterprise:基于订阅的自托管MongoDB版本
MongoDB Community:源代码可用的免费使用、自托管MongoDB版本
行为
限制
除非另有说明,否则默认情况下,geoSearch
命令将结果限制为50个文档。
分片集群
geoSearch
不支持分片集群。
事务
重要
在大多数情况下,分布式事务相较于单文档写入,会带来更高的性能成本,分布式事务的可用性不应替代有效的模式设计。对于许多场景,非规范化数据模型(嵌入文档和数组) 仍然是最适合您的数据和用例的。也就是说,在许多场景中,适当的数据建模将最大限度地减少分布式事务的需求。
有关事务使用的其他考虑因素(例如运行时限制和oplog大小限制),请参阅生产注意事项。
示例
考虑以下示例
db.runCommand({ geoSearch : "places", near: [ -73.9667, 40.78 ], maxDistance : 6, search : { type : "restaurant" }, limit : 30 })
上述命令返回所有在 places
集合中,坐标 [ -73.9667, 40.78 ]
最多距离 6 个单位的 type
为 restaurant
的文档,最多返回 30 个结果。
覆盖默认读取关注度
要覆盖 "local"
的默认读取关注度级别,请使用 readConcern
选项。
以下对副本集的操作指定了 读取关注度 为 "majority"
,以读取已确认写入多数节点的最新数据副本。
注意
无论读取关注度级别如何,节点上的最新数据可能不会反映系统中的最新数据版本。
db.runCommand( { geoSearch: "places", near: [ -73.9667, 40.78 ], search : { type : "restaurant" }, readConcern: { level: "majority" } } )
为确保单个线程可以读取其自身的写入,请使用 "majority"
读取关注度和对副本集主节点的 "majority"
写入关注度。