簡體   English   中英

mongodb:執行geoNear聚合時無法獲取查詢執行程序

[英]mongodb: can't get query executor when executing geoNear aggregate

執行以下聚合時

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

我在做什么想法?

問題可能是:

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

在Mongo shell中運行此代碼以查看所有索引

db.Activities.getIndexes()

我有同樣的問題,並找到了一個不明顯的解決方案。

這是索引:

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 ' 也會導致同樣的錯誤。

也許你有一個復合索引,一個2sphere和另一種類型的索引,如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM