2d
索引
对在二维平面上存储为点的数据使用2d
索引。 2d
索引用于legacy coordinate pairs MongoDB2.2及更早版本中使用的 。
在以下情况下使用2d
索引:
有关地理空间查询的更多信息,请参阅地理空间查询。
Considerations
您可以为$geoNear
管道阶段指定key
选项,以指示要使用的索引字段路径(Field Path)。 $geoNear
这样就允许在具有多个2d
索引和/或多个2 dsphere索引 的集合上使用 阶段:
如果您的collection具有多个
2d
索引和/或多个2dsphere 索引,则必须使用key
选项来指定要使用的带索引字段路径(Field Path)。如果不指定
key
,则不能有多个2d
索引和/或多个2dsphere 索引,因为如果没有key
,多个2d
索引或2dsphere
索引之间的索引选择将不明确。
注意
如果未指定key
,并且您最多只有一个2d
索引和/或只有一个2d
索引,MongoDB 首先会查找要使用的2d
索引。 如果2d
索引不存在,则 MongoDB 会查找要使用的2dsphere
索引。
如果位置数据包含 GeoJSON 对象,请勿使用2d
索引。 要同时对旧版坐标对和GeoJSON 对象建立索引,请使用2dsphere索引。
对collection进行分片时,不能使用2d
索引作为分片键。但是,您可以使用其他field作为分片键,在分片collection上创建地理空间索引。
行为
2d
索引支持在平坦的欧几里得平面上进行计算。 2d
索引还支持球体上的仅距离计算(即 $nearSphere
),但用于球体上的几何计算(例如 $geoWithin
),将数据存储为GeoJSON 对象并使用2dsphere
索引。
一个2d
索引可以引用两个字段。第一个必须是位置字段。2d
复合索引构造的查询首先选择位置字段,然后按附加条件筛选结果。复合2d
索引可以覆盖查询。
sparse
属性
2d
索引始终是稀疏的,并忽略稀疏选项。 如果文档缺少2d
索引字段(或者该字段为null
或空数组),MongoDB 不会将该文档的条目添加到2d
索引。 对于插入,MongoDB 会插入文档,但不会添加到2d
索引。
对于包含2d
索引键和其他类型键的复合索引,只有2d
索引字段决定索引是否引用文档。
排序规则选项
2d
索引仅支持简单的二进制比较,不支持排序规则选项。
要在具有非简单排序规则的collection上创建2d
索引,您必须在创建索引时显式指定{collation: {locale: "simple"}
}
。