2016-04-15 16 views
2

Lassen Sie uns sagen, dass ich einen Benutzer Sammlung wie dieses:mongodb wie nach Entfernung zum Filtern

{ 
    "lastName": "Doe", 
    "firstName": "John", 
    ... 
    "location": { 
    "country": "USA", 
    "city": "New York", 
    ... 
    "lat": 123456, 
    "lon": 123456 
    } 
} 

Ich möchte meine Sammlung nach Entfernung filtern: Return all users near 100 km. Es gibt in dem Dokument $near. Aber ich kann nicht finden, wie man es benutzt.

Ich habe ein Beispiel wie folgt aus:

db.users.find({ 
    location: { 
     $near: [-73.9667, 40.78], 
     $maxDistance: 100000 
    } 
}); 

Also ich denke, meine Frage ist, wie Mongo zu sagen, er hat user.location.lat und user.location.lon überprüfen Entfernung zu berechnen.

Antwort

1

Mit Ihrem Datensatz können Sie nicht.

Das Problem ist, dass Sie keinen Geo-Index haben. Sie benötigen eine Suche nach Geo.

der Lage sein zu erreichen, was Sie wollen, müssen Sie Ihren Datenbestand wie so umstrukturieren:

{ 
    "lastName": "Doe", 
    "firstName": "John", 
    ... 
    "location": { 
    "country": "USA", 
    "city": "New York", 
    ... 
    "coords": [123456, 123456] 
    } 
} 

Die coords Array ist [latitude, longitude]. Dann müssen Sie einen 2d-Index für dieses Feld erstellen.

+0

Gibt es eine andere Möglichkeit, den Index zu erstellen, ohne mein Modell zu aktualisieren? – BoumTAC

+0

Ich glaube nicht. – BanksySan