geoSearch
geoSearch
重要
已在 MongoDB 5.0 中删除
MongoDB 5.0删除了已弃用的
geoHaystack
索引和geoSearch
命令。 请改用带有 的2 d索引$geoNear
或受支持的 地理空间查询运算符 之一。将 MongoDB 实例升级到 5.0 并将 FeatureCompatibilityVersion 设置为
5.0
会删除所有先前存在的geoHaystack
索引。geoSearch
命令提供了使用 MongoDB 的干草堆索引功能的接口。 这些索引可用于在收集基于其他查询(即“干草堆”)的结果后根据位置坐标返回结果。字段类型说明geoSearch
字符串要查询的collection。search
文档用于筛选文档的查询。near
阵列点的坐标。maxDistance
数字可选。 与指定点的最大距离。limit
数字可选。 要返回的最大文档数。readConcern
文档可选。指定读关注。
readConcern
选项的语法如下:readConcern: { level: <value> }
可能的读关注级别是:
"local"
这是针对主节点和从节点的读操作的默认读关注级别。"available"
。可用于对主节点和从节点执行读取操作。对于主节点和非分片从节点,"available"
行为与"local"
相同。查询会返回实例的最新数据。"majority"
。适用于使用 WiredTiger 存储引擎的副本集。"linearizable"
。仅适用于primary
的读取操作。
有关读关注级别的更多信息,请参阅读关注级别。
有关读关注级别的更多信息,请参阅读关注级别。
comment
any可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
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"
写关注。