首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MongoDB 2.4对2d或2dsphere索引字段使用常规查询

如何使用MongoDB 2.4对2d或2dsphere索引字段使用常规查询
EN

Stack Overflow用户
提问于 2016-04-04 19:38:51
回答 1查看 387关注 0票数 1

我有一个地理空间mongodb,其遗留的协调对作为Geo2D索引。我想从这个数据库中提取一个位置列表(遗留的协调对)。对于普通列,我可以对可能的对列表使用"$in“查询,如下所示。

代码语言:javascript
复制
>>> db.collection.find_one({'country': {'$in': ['Argentina', 'Chile']}})

我不知道如何在loc栏中这样做。对loc列的类似操作会引发一个错误。

代码语言:javascript
复制
>>> db.collection.find_one({'loc': {'$in': [(-35, 20), (-30, 21)]}})

geo field only has 1 element :: caused by :: $in: [ [ -35, 20 ], [ -30, 21 ] ]

我想到的解决方案是分别匹配列表中的每个成员。然而,这可能不是最有效的解决办法。有我能做的聚合/地图减少技巧吗?

相关信息

数据库看起来像:

代码语言:javascript
复制
>>> db.collection.find_one()

{u'value': 2.7062699269224995,
 u'_id': ObjectId('56cf807e54013b935b88d3da'),
 u'country': u'Algeria',
 u'date': datetime.datetime(2015, 1, 1, 0, 0),
 u'iso2': u'DZ',
 u'lat': 27.0,
 u'loc': [27.0, -8.0],
 u'lon': -8.0,
 u'place': u'27.0_-8.0_DZ'}

索引键是:

代码语言:javascript
复制
[ { "_id" : 1 }, { "date" : -1 }, { "loc" : "2d" } ]
EN

回答 1

Stack Overflow用户

发布于 2016-04-05 23:32:11

这里的问题是服务器版本是一个MongoDB 2.4.x系列。在MongoDB 2.6.x之前,对“地理空间”索引的查询引擎处理是单独对标准查询进行的,因此,通过请求正则$in表达式而不是$near等地理空间操作,查询发生在引擎中无法处理表达式的部分,因为该字段应用了"2d"地理空间索引。

因此,MongoDB 2.4.x“不能”使用带有常规查询操作的地理空间索引。如果查询“需要”使用“索引”,则“必须”在查询中引用的字段上使用.ensure_index()创建常规索引:

代码语言:javascript
复制
db.collection.ensure_index({ "loc": 1 })

请注意,这是在已经应用的"2d“索引的”加法“中。由于索引是不同的“类型”,因此它们分别命名和存在。因此,两者兼而有之是没有问题的。

另一种方法是将光标上的.hint()$natural说明符一起强制进行“集合扫描”,从而“忽略”地理空间索引。

从MongoDB 2.6.x开始,查询引擎是统一的,这里的限制不适用。根据给定的查询,可能不会使用“地理空间”索引,除非再次指定.hint()以显式选择该索引以供使用。但这样做就不会有问题了。

最后,MongoDB 2.6.x和更高版本允许在以GeoJSON格式存储的数据上创建“地理空间”索引。即:

代码语言:javascript
复制
"location": {
    "type": "Point",
    "coordinates": [27.0, -8.0]
}

由于这样的索引在本例中的"location"字段上,而不是直接在"location.coordinates"数组上,因此这样的$in查询不会将"location"上的“索引”识别为可用于匹配数组内容的正常查询。在这种情况下,您将再次在"location.coordinates"上直接创建一个普通索引,以允许查询使用该“索引”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36411420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档