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

2024-04-25 19:10:08 发布

您现在位置:Python中文网/ 问答频道 /正文

与MONGODI-2D GEOSOTIAL索引为一对。我想从这个数据库中提取一个位置列表(传统坐标对)。对于普通列,我可以使用“$in”查询查询可能的对列表,如下所示。在

>>> db.collection.find_one({'country': {'$in': ['Argentina', 'Chile']}})

我不知道如何在loc列上执行此操作。loc列上的类似操作引发错误

^{pr2}$

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

相关信息

数据库看起来像:

>>> 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'}

索引键包括:

[ { "_id" : 1 }, { "date" : -1 }, { "loc" : "2d" } ]

Tags: inid数据库列表dbdatetimedatefind
1条回答
网友
1楼 · 发布于 2024-04-25 19:10:08

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

因此MongoDB 2.4.x“不能”在常规查询操作中使用地理空间索引。{3“如果您需要在一个索引中创建一个索引”字段{“如果您需要在一个索引中使用^”来创建一个查询}“如果您需要在一个查询中使用^”来创建一个查询:

db.collection.ensure_index({ "loc": 1 })

请注意,这是对已经应用的“2d”索引的“补充”。由于索引属于不同的“类型”,因此它们分别命名和存在。所以两者都有没有问题。在

另一种方法是使用^{}说明符在光标上^{}强制执行“集合扫描”,从而“忽略”地理空间索引。在

从MongoDB 2.6.x及以后,查询引擎是统一的,这里的限制不适用。根据给定的查询,“地理空间”索引可能不被使用,除非您再次指定^{}以便显式选择要使用的索引。但这样就不会有问题了。在

最后要说明的是,MongoDB 2.6.x及以后版本允许在以GeoJSON格式存储的数据上创建“地理空间”索引。i、 电子邮件:

^{pr2}$

因为在本例中,这样的索引将位于"location"字段上,而不是直接位于"location.coordinates"数组上,所以这样的^{}查询不会将{}上的“索引”识别为可用于匹配数组内容的普通查询。在本例中,您将再次直接在"location.coordinates"上创建一个普通索引,以允许查询使用该“索引”。在

相关问题 更多 >