python - 有人知道 pymongo 中 2dsphere 索引的工作示例吗?

标签 python mongodb pymongo

我正在尝试编写一个脚本来执行这里提到的基本 2dsphere 索引操作 2dsphere使用 pymongo。

我找不到任何例子来解决这个问题,这是我目前的尝试:

from pymongo import GEOSPHERE
client=MongoClient('localhost',27017)
db=client['dbtest']
points=db['points']
points.create_index([("loc",GEOSPHERE)])
points.insert({"loc":[2 5]})
points.insert({"loc":[30,5]})
more points.insert

for doc in points.find({"loc" : {"$near": { "$geometry" : {"type":"Point","coordinates":[1,2]},"$maxDistance":20}}}):
     print doc

它给出了错误pymongo.errors.OperationFailure: database error: can't find special index: 2d for: { loc: { $near: { $geometry: { type: "Point", coordinates: [ 1, 2 ] }, $maxDistance: 20 } } }

最佳答案

2dsphere (pymongo.GEOSPHERE) 索引类型仅适用于 MongoDB 2.4 及更高版本。您还想使用 GeoJSON您的积分格式。最后,MongoDB 的地理查询运算符是顺序敏感的,所以你必须使用 SON使用 $maxDistance 等选项时。这是一个使用 $near 的示例:

>>> c = pymongo.MongoClient()
>>> points = c.dbtest.points
>>> points.ensure_index([("loc", pymongo.GEOSPHERE)])
u'loc_2dsphere'
>>> points.insert({'loc': {'type': 'Point', 'coordinates': [40, 5]}})
ObjectId('51b0e508fba522160ce84c3a')
>>> for doc in points.find({"loc" : SON([("$near", { "$geometry" : SON([("type", "Point"), ("coordinates", [40, 5])])}), ("$maxDistance", 10)])}):
...     doc
... 
{u'loc': {u'type': u'Point', u'coordinates': [40, 5]}, u'_id': ObjectId('51b0e508fba522160ce84c3a')}

关于python - 有人知道 pymongo 中 2dsphere 索引的工作示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16908675/

相关文章:

python - IF 语句和输入

python - 使用 beautifulsoup 解析 HTML 类元素的问题

python - python中给定键的所有字典中具有匹配值的平均值

mongodb - 从数组聚合中删除元素

python - 何时更新 mongo 数据库索引

python - 当 nargs ='*' 时从 argparse 生成更好的帮助

mongodb - Mongo 查询数组中的嵌套字段。

ruby-on-rails - 数组元素的排列,作为MongoID查询中的查询条件

MongoDB Capped Collection 最大允许大小

mongodb - Pymongo 仅以列表形式返回值