应用$ geoNear在pymongo中使用聚合查找最近的latlong?

时间:2016-03-11 19:13:46

标签: python mongodb pymongo

我在集合中的文档看起来像这样 -

{'_id' : 'Delhi1', 'loc' : [28.34242,77.656565] }
{'_id' : 'Delhi2', 'loc' : [27.34242,78.626523] }
{'_id' : 'Delhi3', 'loc' : [25.34242,77.612345] }
{'_id' : 'Delhi4', 'loc' : [28.34242,77.676565] }

我想使用pymongo应用聚合,根据输入latlong找出相关文档。我在' loc'上创建了索引。以下是我到目前为止所做的事情 -

pipeline = [{'$geoNear':{'near': [27.8787, 78.2342],
                     'distanceField': "distance",
                     'maxDistance' : 2000 }}]
db['mycollection'].aggregate(pipeline)

但这对我不起作用?如何正确使用它?

2 个答案:

答案 0 :(得分:2)

实际上,我创造了' 2dsphere'集合中的索引,以及使用2dphere的geoNear,我们需要在管道中指定sphere = True

pipeline = [{'$geoNear':{'near': [27.8787, 78.2342],
                 'distanceField': "distance",
                 'maxDistance' : 2000,
                 'spherical' : True }}]

答案 1 :(得分:0)

看起来你有一些格式错误:1)集合和运算符都不需要括号或括号,2)逻辑运算符是小写的。

db.mycollection.aggregate([
    {
        $geoNear: {
            near: { coordinates: [ 27.8787 , 78.2342 ] },
            distanceField: "distance",
            maxDistance: 2000,
            spherical: true
        }
    }
])