2016-08-25 3 views
0

Образец MongoDB документа

{ 
"_id":"5adedaad0bd4134kb0", 
"url":"https://iscon.cdnalign.com/t51.288515/s640x640e35/10249200241120_2108192950_n.jpg?ig_cache_key=MTEYUTB1NDgxN", 
"description":"#funinthesun", 
"locationName":"Calamari", 
"statusValue":1, 
"reason":"Related to travel", 
"category":["park"], 
"geo": { 
     "index":"Point", 
     "coord":[29.123024,77.1999] 
    } 

}

Я палочка, чтобы получить документ в соответствии с там расстояние от определенной точки.

и это запрос, который я использую, чтобы документы поступали в соответствии с расстоянием.

Запрос
var collection = db.collection('myData'); 
collection.ensureIndex({"geo.index":"Point"}); 
collection.find({ 
    geo :{ 
     $near : { 
      $geometry : { 
      index : "Point" , 
      coord : [30.564058, 76.44762696] 
      }, 
     $maxDistance : 100 
     } 
    } 
} 

и это показывает мне эту ошибку: - { «имя»: «MongoError», «сообщение»: «недействительные точка в гео вблизи запроса $ геометрии аргумента: {индекс: \» Точка \ ", coord: [4.27326978424058, 30.4439024447627]} Точка должна быть массивом или объектом", "waitedMS": 0, "ok": 0, "errmsg": "недопустимая точка в аргументе geo near query $ geometry: {index: \ "Точка \", коорд: [+4,27326978424058, +30,4439024447627]} Точка должен быть массив или объект», "код": 2}

ответ

1

https://docs.mongodb.com/manual/reference/operator/query/near/

Может быть здесь не так, но из docs $ geometry требуется два параметра index и координат. У вас есть координация. Может быть, это и есть проблема. Изменение

coord : [30.564058, 76.44762696] 

быть

coordinates : [30.564058, 76.44762696] 

также изменить имя в БД тоже.

Надеюсь, это поможет.

1

Если вы проверяете $ вблизи документации https://docs.mongodb.com/manual/reference/operator/query/near/ вы увидите, что у вас есть две проблемы здесь:

  1. Вам нужен индекс типа 2dsphere для того, чтобы сделать geospacial запросы на полях GPS
  2. geospacial точка должны иметь свойство координат имя и не Coor

Вот правильная версия кода, которая должна работать

var collection = db.collection('myData'); 
collection.ensureIndex({"geo":"2dsphere"}); 
collection.find({ 
    geo :{ 
    $near : { 
     $geometry : { 
     index : "Point" , 
     coordinates : [30.564058, 76.44762696] 
     }, 
    $maxDistance : 100 
    } 
    } 
}) 
Смежные вопросы