2016-10-01 53 views
0

我有一個Node.js測試,其中有多個對象模擬從地圖中的某個點移開,並且數值測試是否在內從這一點來看,這是一個輻射。 每個對象都對應於嵌套舊式2d索引'location.loc'的模型。

我已經使用這個查詢

var center={_lat:20,lng:-100}; 

var area = { 
     center: [center._lng,center._lat], 
     radius: 100,//This are supossed to be meters 
     unique: true, 
     spherical: true } 


    MyModel.where('location.loc') 
     .within() 
     .circle(area) 
     .exec(function (err, records) { 
      if (err) { 
       throw err; 
      } 
      //Log Length of records 
     }); 

而且

MyModel.find({ 
    "location.loc": { 
     $near: [center._lng,center._lat], 
     $maxDistance: 1 //This is suposed to be a mile 
    } 
    }).exec(function(err, documents) { 
     if (err) { 
      throw err; 
     } 
     //Log documents length 
    }); 

但是這兩個腳本返回我的文檔TE整個集合,甚至當他們英里從點之遙。 同時我在我的Mongo客戶端使用$ near,$ geoWithin和這些查詢爲我提供了正確的答案。

我的Mongoose腳本有什麼問題?

對於這種情況,應該只使用within()。circle()嗎?

回答

0

結果發現第一個代碼中的半徑被錯誤定義。 在此Mongo documentation

球形:真,如果指定了以GeoJSON點,MongoDB使用米作爲測量

的單元,但是這是一個以GeoJSON點和geoNear
對於傳統座標格式[long,lat],我們必須將半徑值除以3963.2以將其轉換爲英里

相關問題