定义二维索引的位置范围
您可以定义2d 索引中包含的坐标范围。默认情况下,二维索引的经度和纬度边界为:
- 大于或等于
-180
- 少于
180
要更改二维索引的位置范围,请在创建索引时指定min
和 选项:max
db.<collection>.createIndex(
{
<location field>: "2d"
},
{
min: <lower bound>,
max: <upper bound>
}
)
和范围包括在内min
,并且适用于经度和纬度。max
关于此任务
重要的
2d 索引的默认位置范围允许纬度小于 -90 和大于 90,这些都是无效值。未定义使用这些无效点进行地理空间查询的行为。
为二维索引定义较小的位置范围可以减少索引中存储的数据量,并可以提高查询性能。
如果您的集合包含索引位置范围之外的坐标数据,则无法创建二维索引。
创建二维索引后,您无法插入包含索引位置范围之外的坐标数据的文档。
在你开始之前
创建contacts
集合:
db.contacts.insertMany( [
{
name: "Evander Otylia",
phone: "202-555-0193",
address: [ 55.5, 42.3 ]
},
{
name: "Georgine Lestaw",
phone: "714-555-0107",
address: [ -74, 44.74 ]
}
] )
该address
字段包含旧坐标对。
过程
在字段上创建二维索引address
。指定以下位置边界:
min
的界限-75
max
的界限60
db.contacts.createIndex(
{
address: "2d"
},
{
min: -75,
max: 60
}
)
结果
该索引覆盖的位置范围更小,并且比默认的二维索引具有更高的性能。
创建索引后,您无法插入包含索引位置范围之外的坐标数据的文档。例如,您 不能插入以下文档:
db.contacts.insertOne(
{
name: "Paige Polson",
phone: "402-555-0190",
address: [ 70, 42.3 ]
}
)
该address
字段的经度值为70
,高于 的max
边界60
。
下一步
您可以使用二维索引对位置数据进行计算,例如邻近查询。