地理空间索引限制

2d2dsphere索引是地理空间索引。地理空间索引有以下限制:

排序选项

二维索引不支持排序选项,仅支持二进制比较。二进制比较比较每个字符串中每个字符的 Unicode 数字值,并且不考虑字母大小写或重音符号。

要在具有非简单排序规则的集合上创建二维索引,您必须{ collation: { locale: "simple" } }在创建索引时显式指定。

例如,考虑一个collationTest以排序规则命名的集合{ locale: "en" }

db.createCollection(
   "collationTest",
   {
      collation: { locale: "en" }
   }
)

要在集合上创建二维索引collationTest,您必须指定{ collation: { locale: "simple" } }。此命令在字段上创建一个二维索引loc

db.collationTest.createIndex(
   {
      loc: "2d"
   },
   {
      collation: { locale: "simple" }
   }
)

覆盖查询

地理空间索引无法覆盖查询。

片键

您不能使用地理空间索引作为分片键。但是,您可以使用不同的字段作为分片键在分片集合上创建地理空间索引。

多个地理空间索引$geoNear

如果您的集合具有多个地理空间索引,则在运行 $geoNear管道阶段时,必须指定该$geoNear key选项。该key选项指定使用哪个索引来支持查询。

支持的数据类型

使用 2dsphere 索引进行索引的字段必须包含几何数据。几何数据可以是:

你不能:

  • 将包含非几何数据的文档插入到使用 2dsphere 索引进行索引的字段中。
  • 在包含非几何数据的字段上构建 2dsphere 索引。

索引键数量

当您创建一个2dsphere索引时,mongod会将GeoJSON形状映射到内部表示形式。结果的内部表示可能是一个大数组的值。

indexMaxNumGeneratedKeysPerDocument设置限制为单个文档生成的最大键数,以防止内存不足错误。如果某个操作需要的键数量多于 indexMaxNumGeneratedKeysPerDocument参数指定的数量,则该操作将失败。

默认情况下,服务器允许100,000每个文档最多有索引键。要允许更多索引键,请提高该 indexMaxNumGeneratedKeysPerDocument值。

平面上的精确匹配

二维索引无法提高坐标对上精确匹配的性能。

例如,考虑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字段上的二维索引不会提高以下查询的性能:

db.contacts.find( { address: [ 55.5, 42.3 ] } )

要提高此查询的性能,请在字段上创建升序或降序索引address

db.contacts.createIndex( { address: 1 } )

了解更多

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""