2016-06-15 2 views
0

У меня есть основной документ, например, так:

{ 
    "_id" : ObjectId("5760fe623f6d3ad25e387ffc"), 
    "type": 5, 
    "product" : { 
     "location" : { 
       "geometry" : [ 153.39999999999998, -28.016667 ], 
       "name" : "Gold Coast QLD, Australia", 
       "id" : "ChIJt2BdK0cakWsRcK_e81qjAgM" 
      } 
    } 
} 

Я пытаюсь запросить местоположение с помощью $near метода, предоставленного MongoDB.

Это мой запрос:

db.posts.find({ 
    'product.location.geometry': { 
     $near: [ 153.39999999999998, -28.016667 ] 
    } 
}) 

В документации MongoDB говорится, что:

Чтобы указать точку с помощью устаревших координат, $ вблизи требует 2d индекса и имеет следующие синтаксис:

{ 
    $near: [ <x>, <y> ], 
    $maxDistance: <distance in radians> 
} 

I даже не дает этот пример на их сайте:

db.legacy2d.find({ 
    location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } 
}) 

Это ошибка она производит:

Error: error: { 
    "waitedMS" : NumberLong(0), 
    "ok" : 0, 
    "errmsg" : "error processing query: ns=mytestnodedb.postsTree: GEONEAR field=product.location.geometry maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query", 
    "code" : 2 
} 

Я не в состоянии определить все, что случилось с моим запросом. Монго утверждает, что $near должен быть долготой, за которой следует широта, которую я определенно делаю. Я целеустремленно упускаю $maxDistance, так как Mongo заявляет, что он вернет результаты sorted from nearest to farthest.

ответ

1

Ну ошибка в значительной степени сам пояснительный. Для запроса требуется 2d индекс, который он не может найти.

Я бы создать индекс, как:

db.collection.createIndex({"product.location.geometry":"2d"}) 

Теперь, если я запускаю запрос на выборочных данных, я получаю

{ 
    "_id" : ObjectId("5760fe623f6d3ad25e387ffc"), 
    "type" : 5.0, 
    "product" : { 
     "location" : { 
      "geometry" : [ 
       153.39999999999998, 
       -28.016667 
      ], 
      "name" : "Gold Coast QLD, Australia", 
      "id" : "ChIJt2BdK0cakWsRcK_e81qjAgM" 
     } 
    } 
} 
+0

Означает ли это, что я должен запустить 'CreateIndex()' после того, как каждое создание нового документа внутри этой коллекции? – Fizzix

+0

нет, только один раз сверху комплект. – Saleem

+0

Хорошо, круто. Кажется, сейчас хорошо работает. Благодаря! – Fizzix

Смежные вопросы