On this page
geoSearch
在本页面
geoSearch
- geoSearch命令提供 MongoDB haystack index功能的接口。这些索引对于在基于其他查询(例如“干草堆”)收集结果后*基于位置坐标返回结果很有用。
Field | Type | Description |
---|---|---|
geoSearch |
string | 要查询的集合。 |
search |
document | 查询以过滤文档。 |
near |
array | 一个点的坐标。 |
maxDistance |
number | 可选的。距指定点的最大距离。 |
limit |
number | 可选的。返回的最大文件数。 |
readConcern |
document | 可选的。指定read concern。 |
readConcern 选项具有以下语法:
在版本 3.6 中更改。readConcern: { level: <value> }
可能的阅读关注级别为:
"local"。这是默认的阅读关注级别。
"available"。当未指定读取操作和因果一致的会话和“ level”时,这是针对次要对象的读取的默认值。查询返回实例的最新数据。
"majority"。可用于使用WiredTiger 存储引擎的副本集。
"linearizable"。仅可用于primary上的读取操作。
有关阅读关注级别的更多信息,请参阅阅读关注级别。
对于"local"(默认)或"majority"读关注级别,您可以指定afterClusterTime
选项以使读操作返回满足级别要求和在群集时间之后指定的数据。有关更多信息,请参见读取操作和因果一致的会话。
有关阅读关注级别的更多信息,请参见阅读关注级别。
Behavior
除非另有说明,否则geoSearch命令将结果限制为 50 个文档。
Important
分片群集不支持geoSearch。
Examples
考虑以下示例:
db.runCommand({
geoSearch : "places",
near: [ -73.9667, 40.78 ],
maxDistance : 6,
search : { type : "restaurant" },
limit : 30
})
上面的命令返回type
到restaurant
的所有文档,它们与集合places
中的坐标[ -73.9667, 40.78 ]
的最大距离为 6 个单位,最多 30 个结果。
覆盖默认读取问题
要覆盖默认的阅读关注级别"local",请使用readConcern
选项。
对副本集的以下操作指定Read Concern到"majority"来读取已确认已写入大多数节点的数据的最新副本。
Note
- 要使用read concern级别"majority",副本集必须使用WiredTiger 存储引擎和选举协议版本 1。
从 MongoDB 3.6 开始,默认情况下启用对读取关注"majority"的支持。对于 MongoDB 3.6.1-3.6.x,您可以禁用阅读关注"majority"。有关更多信息,请参见禁用多数阅读关注。
- 无论read concern级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
db.runCommand(
{
geoSearch: "places",
near: [ -73.9667, 40.78 ],
search : { type : "restaurant" },
readConcern: { level: "majority" }
}
)
为确保单个线程可以读取其自己的写入,请对副本集的主数据库使用"majority"读取关注和"majority"写入关注。