0

Mongodb下 2dsphere 索引

Posted by 撒得一地 on 2016年4月15日 in Mongodb教程

在新版2.4中有此功能。

概述

2dsphere 索引支持球面上的几何计算的查询。2dsphere 索引支持所有 MongoDB 地理空间查询 ︰ 包含查询(在一个指定多边形内的位置进行查询)、 交集查询(查询指定几何相交的位置)和临近查询(如查询离另一个点最近的点)。地理空间查询操作,可以参阅支持地理空间查询的运算符。

2dsphere 索引支持 GeoJSON 对象和坐标对形式的数据存储。对于坐标对存储,索引将坐标对数据转换为 GeoJSON 点。关于 GeoJSON 对象的详细信息,请参阅 GeoJSON 对象。

像球形的默认基准是 wgs84 坐标系。坐标轴的顺序是经度,纬度。

2dsphere (Version 2)

在2.6版本中发生改变

MongoDB 2.6 介绍了 2dsphere 索引的第二版。版本 2 是创建在 MongoDB 2.6 和之后系列中的 2dsphere 索引的默认版本。若要重写默认版本 2 和版本 1 索引,在创建索引时需要包含选项 {"2dsphereIndexVersion": 1}。

(稀疏属性)sparse Property

在2.6版中发生改变.

2dsphere索引(版本2中)是默认的稀疏索引。如果文档没有2dsphere索引字段(或字段为null或为空数组),MongoDB 不会把文档添加到索引项字段中。对于插入操作,MongoDB 插入文档,但不会添加到 2dsphere 索引中。

对于一个包含 2dsphere 索引键和其他类型键的复合索引,只有 2dsphere 索引字段确定是否索引引用一个文档。

MongoDB 的早期版本只支持 2dsphere (版本 1) 索引。2dsphere (版本 1) 索引默认是稀疏性的,会拒绝带有空位置字段的文档。

GeoJSON 对象 

2dsphere (版本 2) 支持额外的 GeoJSON 对象,包括︰ 多点(MultiPoint)、 多个线段(MultiLineString)、多个多边形(MultiPolygon,)、几何集合(GeometryCollection)。所有支持的 GeoJSON 对象的详细信息,请参阅 GeoJSON 对象。

注意事项

geoNear 和 $geoNear 限制

geoNear 命令和 $geoNear 管道阶段(pipeline stage)要求一个集合顶多只能有一个 2dsphere 索引 或 只有一个 2d 索引,而地理空间查询运算符 (如 $near 和 $geoWithin) 允许集合具有多个地理空间索引。

对于GeoNear 命令和 $geoNear 管道阶段的地理空间索引存在的限制,是因为 geoNear 命令和 $geoNear 管道阶段语法里没有包括位置字段。因此,如何在多个 2d 或者 2dsphere 索引中做选择这将造成歧义。

这种限制并不适用于地理空间查询运算符,因为这些操作符要求指定一个地理位置字段,来消除歧义。

Shard Key Restrictions
分片键限制

你不能使用 2dsphere 索引作为一个分片键(shard key)来划分分片集合。然而,你可以在分片集合上使用不同的字段作为分片键来创建和维护地理空间索引。

2dsphere 索引字段的限制

具有 2dsphere 索引的字段必须存储几何坐标对形式的数据或 GeoJSON 数据。如果您尝试在文档的 2dsphere 索引字段中插入带有非几何类型的数据,或者在一个集合中生成 2dsphere 索引,而被索引的字段存储非几何类型的数据,则操作将失败。

创建一个 2dsphere 索引

若要创建一个 2dsphere 索引,使用 db.collection.createIndex() 方法,将位置字段指定为键和指定字符串文字"2dsphere"作为索引类型 ︰

db.collection.createIndex({<location field>:"2dsphere"})

与复合的 2d 索引可以引用一个位置字段和另一个字段不同的是, 2dsphere 索引可以引用多个位置和非位置字段

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

2 + 6 = ?

网站地图|XML地图

Copyright © 2015-2017 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.