2012-08-02 45 views
2

我已經在數據庫中創建了一個集合,並使用適當的索引進行了更新以將其恢復。即時得到與follogingMongoDB位置NearBy unique

例子:

db.car.save({ "name":"Toyota car", "affiliation":"Toyota", "loc":{"lon":55.93939251390387,"lat":-113.999}}) 

db.car.find({"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}}) 

我有100K +的記錄在數據庫中,當我搜索上面的查詢返回20K記錄。

實際上,這在「名稱」列中有一些重複的值。我如何獲得「名稱」的獨特價值?

+0

MongoDB中地理位置使用其他光標處理數據,所以它不可使用distict,$或$和。地圖縮小速度較慢,添加此功能的門票爲1歲。如果您不需要搜索$,只需搜索loc.0 => '50 .93 ..'而無需$內。 – user956584 2012-08-03 13:00:15

回答

2

您無法使用MongoDB 2.0.x中的查詢來獲得所需的結果,因此需要在應用程序代碼中操作結果。

如果你只是名字後,你可以限制字段輸出:

db.car.find(
    {"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}}, 
    {"_id": 0, "name": 1} 
) 

如果你想找到不同的名稱,你可以這樣做:

// Save cars we've seen 
> var cars_seen = {} 

// The unique list we actually want 
> var cars = [] 

// Find closest cars to given geo point 
> db.car.find(
    {"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}}, 
    {"_id": 0, "name": 1} 
).forEach(
    function(doc) { 
     // Add names we haven't seen yet 
     if (!cars_seen[doc.name]) { 
      cars_seen[doc.name] = 1; 
      cars.push(doc.name); 
     } 
    } 
) 

> cars 
[ "Skoda", "Benz", "Skoda SUV" ]