- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
2dsphere 索引
2dsphere
索引
在本页面
概述
2dsphere
索引支持计算类似地球的球体上的几何形状的查询。2dsphere
索引支持所有MongoDB地理空间查询:包含、相交和邻近度查询。 有关地理空间查询的更多信息,请参见地理空间查询。
2dsphere
索引支持存储为GeoJSON对象和旧版坐标对的数据(另请参阅2dsphere索引字段限制)。对于遗留坐标对,索引将数据转换为GeoJSONPoint。
版本号
2dsphere索引版本 | 描述 |
---|---|
版本3 | MongoDB 3.2引入了一个版本3的2dsphere索引。版本3是在MongoDB 3.2和更高版本中创建的2dsphere索引的默认版本。 |
版本2 | MongoDB 2.6引入了2dsphere索引的版本2。版本2是在MongoDB 2.6和3.0系列中创建的2dsphere索引的默认版本。 |
要覆盖默认版本并指定其他版本,请在创建索引时包含选项{“ 2dsphereIndexVersion”:
。
sparse
属性
版本2和更高版本的2dsphere
索引始终为sparse且忽略sparse选项。如果文档缺少2dsphere
索引所在字段(或者该字段为null或空数组),则MongoDB不会将文档条目添加到索引中。对于插入,MongoDB会插入文档,但不添加到2dsphere
索引。对于包含2dsphere
索引键以及其他类型键的复合索引,该索引是否引用文档只取决于2dsphere
索引字段。
对于包含2dsphere
索引键和其他类型的键的复合索引,只有2dsphere
索引字段确定索引是否引用文档。
MongoDB的早期版本仅支持2dsphere (Version 1)
索引。 默认情况下,2dsphere (Version 1)
索引不是sparse索引,并且拒绝该字段为空的文档。
其他GeoJSON对象
版本2和更高版本的2dsphere
索引包含对其他GeoJSON对象的支持:MultiPoint,MultiLineString,MultiPolygon和GeometryCollection。有关所有受支持的GeoJSON对象的详细信息,请参见GeoJSON对象。
注意事项
geoNear
和$geoNear
的限制
从MongoDB 4.0开始,您可以为$geoNear
管道指定一个key
选项以明确指示要使用的索引字段路径。这使得$geoNear
在具有多个2dsphere
索引或多个2d索引的文档中也能被使用:
- 如果您的集合具有多个
2dsphere
索引或多个2d索引,则必须使用key
选项来指定使用哪个索引字段路径。 - 如果未指定
key
,您将无法使用多个2dsphere
索引或多个2d索引。 因为没有指定key
时,在多个2d
索引或2dsphere
索引中选择索引将变得无法明确。
[success] 注意
如果您不指定
key
,您将最多只能拥有一个2dsphere
索引或一个2dsphere
索引,MongoDB首先寻找2d
索引。 如果不存在2d
索引,则MongoDB会寻找2dsphere
索引。
分片键限制
对集合做分片时,不能将2dsphere
索引用作分片键。 但是,您可以通过使用一个不同的字段作为分片键来在分片集合上创建地理空间索引。
2dsphere
索引字段限制
具有2dsphere索引的字段必须包含坐标对或GeoJSON形式的数据。如果您尝试插入一个在2dsphere
索引字段中包含非几何数据的文档,或者在一个索引字段中包含非几何数据的集合上构建2dsphere
索引,该操作将失败。
创建2dsphere
索引
要创建2dsphere
索引,请使用db.collection.createIndex()
方法并指定字符串"2dsphere"
作为索引类型:
db.collection.createIndex( { <location field> : "2dsphere" } )
与只能引用一个位置字段和另一个字段的复合2d索引不同的是,复合2dsphere
索引可以引用多个位置字段及非位置字段。
以下示例,基于一个places
集合,该集合的文档将位置数据以GeoJSON Point形式存储在loc
字段中:
db.places.insert(
{
loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
}
)
db.places.insert(
{
loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category : "Airport"
}
)
创建2dsphere
索引
以下操作在位置字段loc
上创建一个2dsphere索引:
db.places.createIndex( { loc : "2dsphere" } )
使用2dsphere
索引键创建复合索引
复合索引可以包含2dsphere
索引键和非地理空间索引键。例如,以下操作将创建一个复合索引,其中第一个键loc
是2dsphere
索引键,其余键category
和names
是非地理空间索引键,并分别指定降序(-1
)和升序(1
)。
db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )
与2d索引不同,复合2dsphere
索引不需要将位置字段作为第一个索引字段。 例如:
db.places.createIndex( { category : 1 , loc : "2dsphere" } )
译者:杨帅 周正
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05