2016-05-23 68 views
2

我的mongo版本是3.2.6mongodb中的maxDistance:通過數據查找附近的問題

我的表是restaurant_locations。如下

我已經給指數:此表中存儲

db.restaurant_locations._ensureIndex({'location': '2dsphere'}); 

的數據如下:

> db.restaurant_locations.find().pretty(); 
{ 
     "_id" : ObjectId("573ff477df3c12bdd6463d07"), 
     "location" : { 
       "type" : "Point", 
       "coordinates" : [ 
         72.5220332, 
         23.0656791 
       ] 
     } 
} 
{ 
     "_id" : ObjectId("573ff5badf3c12bdd6463d08"), 
     "location" : { 
       "type" : "Point", 
       "coordinates" : [ 
         62.5220332, 
         13.0656791 
       ] 
     } 
} 

現在,當我火了以下查詢:

db.restaurant_locations.find({ 
    location: { 
    $near: { 
     $geometry: { 
      type: 'Point', 
      coordinates: [ 70, 20 ] 
     }, 
    $maxDistance: 100000000 
    } 
    } 
}); 

我得到這兩個記錄作爲輸出:

{ "_id" : ObjectId("573ff477df3c12bdd6463d07"), "location" : { "type" : "Point", "coordinates" : [ 72.5220332, 23.0656791 ] } } 
{ "_id" : ObjectId("573ff5badf3c12bdd6463d08"), "location" : { "type" : "Point", "coordinates" : [ 62.5220332, 13.0656791 ] } } 

現在,當我執行以下查詢:

db.restaurant_locations.find({ 
    location: { 
    $near: { 
     $geometry: { 
      type: 'Point', 
      coordinates: [ 70, 20 ] 
     }, 
    $maxDistance: 1000000 
    } 
    } 
}); 

我只得到一個記錄作爲輸出:

{ "_id" : ObjectId("573ff477df3c12bdd6463d07"), "location" : { "type" : "Point", "coordinates" : [ 72.5220332, 23.0656791 ] } } 
  1. 我沒有得到究竟如何$ maxDistance工作。
  2. 我想在10公里的距離內找到餐館,那麼確切的事情是什麼,我需要通過$ maxDistance?
  3. 假設我的座標是40和20,所以如果我想在10kms以內的餐廳,以上兩個記錄顯示?

我剛纔提到很多MongoDB的文檔,計算器的問題,但我沒有得到確切的想法,它是如何工作

預先感謝幫助

回答

0

I am not getting exactly how $maxDistance work.

爲了得到maxDistance的工作,你必須使用$nearSphere函數

您的查詢將somet興這樣的:

location: { 
    $nearSphere: { 
     $geometry: { 
      type: 'Point', 
      coordinates: [ 70, 20 ] 
     }, 
    $maxDistance: 10000 
    } 
    } 

I want to find restaurants within a distance of 10 kms,

你有1000的蒙戈分辨率成倍這是米

Suppose my co-ordinates are 40 and 20, so if I want restaurants within 10kms, will above two records display?

是的,但你必須要確保您先指定經度,然後指定緯度。

+0

我執行您指定的查詢,但仍然沒有給出任何輸出,如果我將「10000」替換爲「1000000」,我得到一個記錄 –