2015-05-14 14 views
5

khi thực hiện những điều sau đây tổng hợpMongoDB: không thể có được người thi hành truy vấn khi thực hiện geoNear tổng

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

Tôi nhận được lỗi sau

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

khi tôi chạy lệnh geoNear, nó hoạt động tốt .

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

Bất kỳ ý tưởng nào tôi đang làm lo lắng?

Trả lời

2

Những vấn đề có thể là:

  1. Bạn đang thiếu một "2dsphere" chỉ số trong bộ sưu tập Activities.
  2. Có nhiều chỉ số địa lý trong bộ sưu tập Activities

Run mã này trong Mongo vỏ để xem tất cả các chỉ số

db.Activities.getIndexes() 
0

tôi đã cùng một vấn đề và tìm ra giải pháp đó là không rõ ràng.

Dưới đây là các chỉ số:

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

Vì vậy, tôi đã nhận được rằng "không thể có được người thi hành truy vấn" vì 2 điều:

  • Như nó thấy chỉ số là hợp chất, và như được thông báo here truy vấn của bạn phải chứa tất cả các trường từ chỉ mục
  • Thứ hai, sau khi thử nghiệm với các tùy chọn chỉ mục, nó sẽ d ra rằng 'partialFilterExpression' gây lỗi tương tự cũng ..
0

Có thể bạn có một chỉ số hợp chất, một 2sphere và một loại chỉ số, một cái gì đó như:

{ 
    "name: 1, 
    "location" : "2dsphere" 
} 
Các vấn đề liên quan