2015-10-16 1 views
1

Я пытаюсь получить результаты близлежащего местоположения с определенной точки. Используя обычный способ нахождения по идентификатору, возвращается результат, но когда я пытаюсь найти соседнее местоположение с использованием координат, результат не появляется. В моем коде не было никаких ошибок/предупреждений, но результатов не было. Что мне не хватает?

Модель схемы

var locationSchema = new Schema({ 
    fb_location: String, 
    coordinates:[] 
}); 

var feed_postSchema = new Schema({ 
    content: String, 
    location: [locationSchema], 
    image: [{ type : String }], 
    created_at: { type : Date, default: Date.now } 
}); 

locationSchema.index({coordinates:'2dsphere'}); 

Server.js

app.get('/test_radar',function(request,response){ 
    Feed_Post.find( 
    { 
     'location.coordinates' : 
     { 
      $near : 
      { 
       coordinates: [100,5] 
      }, 
      $maxDistance: 100 
     } 
    },function(err,ret){ 
     console.log(response.json(ret)); 
    }) 
}); 

База данных Sample

"_id" : ObjectId("5620a3c2fde01a55065f4c3b"), 
    "content" : "Test post", 
    "created_at" : ISODate("2015-10-16T07:14:10.636Z"), 
    "image" : [ ], 
    "location" : [ 
      { 
        "fb_location" : "Malaysia", 
        "_id" : ObjectId("5620a3c2fde01a55065f4c3c"), 
        "coordinates" : [ 
          100, 
          5 
        ] 
      } 
    ], 
    "__v" : 0 

Примечание: я установить $ maxDistance до 100 * 1000. Существует до сих пор нет результат.

ответ

1

$near Оператор требует геопространственный индекс.

Если вы хотите определить свое местоположение как точку, используя устаревшие координаты, вы должны иметь 2D index created. Затем вы сможете использовать оператор $near в указанном вами синтаксисе.

Вы создали 2dsphere индекс, так что вы должны указать GeoJSON точку в запросе:

Feed_Post.find( 
    { 
     'location.coordinates' : 
     { 
      $geometry: { 
       type: "Point" , 
       coordinates: [ 100 , 5 ] 
      }, 
      $maxDistance: 100 
     } 
    },function(err,ret){ 
     console.log(response.json(ret)); 
    }) 

Проверить $near определение.

+0

Да, вы правы! Я заметил свою ошибку. Спасибо за помощь мне! –

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