mongodb:执行geoNear聚合时无法获取查询执行程序

时间:2015-05-14 15:12:44

标签: mongodb

执行以下聚合

db.Activities.aggregate([
   {
     $geoNear: {
        near: { coordinates: [ -73.99279 , 40.719296 ] },
        distanceField: "location.calculated",
        spherical: true,
     }
   }
])

我收到以下错误

uncaught exception: aggregate failed: {
    "errmsg" : "exception: geoNear command failed: { ok: 0.0, errmsg: \"can't get query executor\" }",
    "code" : 16604,
    "ok" : 0
}

当我运行geoNear命令时,它运行正常。

db.runCommand( {
   geoNear: "Activities" ,
   near: [ -73.99279 , 40.719296 ],
   spherical: true,
})

任何想法我在做什么?

3 个答案:

答案 0 :(得分:3)

问题可能是:

  1. 你错过了一个" 2dsphere"集合Activities中的索引。
  2. 集合Activities
  3. 中有多个地理位置索引

    在Mongo shell中运行此代码以查看所有索引

    db.Activities.getIndexes()
    

答案 1 :(得分:0)

我遇到了同样的问题,并找到了一个不明显的解决方案。

这是索引:

db.buildings.createIndex(
    {    
        'Address.CityCode': 1,
        'Rooms.Categories': 1,
        'Address.Coords': '2dsphere'
    },
    {
        background: true,
        name: 'IX_Address.CityCode_Rooms.Category_Address.Coords_Published',
        partialFilterExpression: { 'Rooms.Published': true }
    }
);

所以我得到了"因为两件事情而无法获得查询执行者"

  • 因为它看到索引是复合的,并且因为它告诉here您的查询必须包含索引中的所有字段
  • 其次,在使用索引选项进行试验后,发现' partialFilterExpression '导致同样的错误..

答案 2 :(得分:0)

也许你有一个复合索引,一个2sphere和另一种类型的索引,比如:

{
    "name: 1,
    "location" : "2dsphere"
}