MongoDB:执行geoNear聚合时无法获取查询执行器

5
执行以下聚合时:
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个回答

3

可能的问题包括:

  1. 您在集合Activities中缺少“2dsphere”索引。
  2. 在集合Activities中有多个地理位置索引。

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

db.Activities.getIndexes()

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 }
    }
);

所以我之前遇到了"无法获取查询执行器"的问题,原因有两个:

  • 正如你所看到的,索引是复合的,而且根据这里所说,你的查询必须包含索引中的所有字段。
  • 其次,在尝试索引选项后,发现'partialFilterExpression'也会导致相同的错误。

0

也许你有一个复合索引,一个2球体和另一种类型的索引,类似于:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接