geoSearch重要
已在 MongoDB 5.0 中删除
MongoDB5.0 删除了已弃用的 geoHaystack索引和
geoSearch命令。请改用带有 的2 d索引或受支持的地理空间查询运算符之一。$geoNear将 MongoDB 实例升级到 5.0 并将 FeatureCompatibilityVersion 设置为
5.0会删除所有先前存在的 geoHaystack 索引。geoSearch命令提供了使用 MongoDB 的haystack 索引功能的接口。 这些索引可用于在收集基于其他查询(即“干草堆”)的结果后根据位置坐标返回结果。字段类型说明geoSearch字符串
要查询的collection。
search文档
用于筛选文档的查询。
near阵列
点的坐标。
maxDistance数字
可选。 与指定点的最大距离。
limit数字
可选。 要返回的最大文档数。
readConcern文档
可选。指定读关注。
readConcern选项的语法如下:readConcern: { level: <value> }可能的读关注级别是:
"local"这是针对主节点和从节点的读操作的默认读关注级别。"available"。可用于对主节点和从节点执行读取操作。对于主节点和非分片从节点,"available"行为与"local"相同。查询会返回实例的最新数据。"majority"。适用于使用 WiredTiger 存储引擎的副本集。"linearizable"。仅适用于primary的读取操作。
有关读关注级别的更多信息,请参阅读关注级别。
有关读关注级别的更多信息,请参阅读关注级别。
commentany
可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
mongod 日志消息,位于
attr.command.cursor.comment字段中。command.comment字段中的数据库分析器输出。currentOp输出,在command.comment字段。
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
Limit
除非另有说明,否则 geoSearch 命令将结果限制为 50 个文档。
分片集群
geoSearch 不支持分片集群。
事务
重要
在大多数情况下,与单文档写入操作相比,分布式事务会产生更高的性能成本,并且分布式事务的可用性不应取代有效的模式设计。在许多情况下,非规范化数据模型(嵌入式文档和数组)仍然是数据和使用案例的最佳选择。换言之,对于许多场景,适当的数据建模将最大限度地减少对分布式事务的需求。
有关其他事务使用注意事项(如运行时间限制和 oplog 大小限制),另请参阅生产注意事项。
示例
考虑以下示例:
db.runCommand({ geoSearch : "places", near: [ -73.9667, 40.78 ], maxDistance : 6, search : { type : "restaurant" }, limit : 30 })
上述命令返回collectionplaces中type为restaurant且与坐标[ -73.9667, 40.78 ]最大距离为 6 个单位的所有文档,最多 30 个结果。
覆盖默认读关注
若要覆盖 "local" 的默认读取关注级别,请使用 readConcern 选项。
对副本集执行以下操作可以指定读关注 "majority",以读取确认已写入大多数节点的数据的最新副本。
注意
无论读关注级别如何,节点上的最新数据可能无法反映系统中数据的最新版本。
db.runCommand( { geoSearch: "places", near: [ -73.9667, 40.78 ], search : { type : "restaurant" }, readConcern: { level: "majority" } } )
为确保单个线程可以读取自己的写入内容,请对副本集的主节点使用 "majority" 读关注和 "majority" 写关注。