Ich versuche die Länge/Breite eines Ortes in meinem Benutzermodell zu speichern und abzufragen mit $geoNear
. Ich habe mir fast jede Seite angesehen, die ich zu diesem Thema finden konnte, aber ich bin mir nicht sicher, wie ich 1) das Modell entsprechend erstellen und wie ich es abfragen kann.Erstellen und Finden von GeoLocation in Mungo
hier ist der Teil meines Modell:
loc: {
//type: 'Point', // see 1
//type: String, // see 2
coordinates: [Number],
index: '2dsphere' // see 3
},
@ 1: die Art der Dokumentation nach ‚Punkt‘ sein muss, wenn ich einen Punkt speichern wollen, aber es wirft
TypeError: Undefined type `Point` at `loc`
Did you try nesting Schemas? You can only nest using refs or arrays.
die macht Sinn, da ich denke, es sollte ein String
@ 2 sein: das wirft nicht sofort einen Fehler, aber wenn ich versuche, einen Benutzer zu speichern, bekomme ich:
name: 'ValidationError',
errors:
{ loc:
{ [CastError: Cast to String failed for value "[object Object]" at path "loc"]
@ 3: Wenn ich den Index wie das erstellen möchten erhalte ich die Fehlermeldung:
TypeError: Undefined type `2dsphere` at `loc.index`
Did you try nesting Schemas? You can only nest using refs or arrays.
so habe ich versucht, den Index zu speichern, was fühlte sich ein wenig besser geeignet für mich wie folgt aus:
userSchema.index({'loc': '2dsphere'});
, die die folgenden Fehler auslöst, wenn ich versuche, einen neuen Benutzer zu speichern:
- { [MongoError: Can't extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }]
name: 'MongoError',
message: 'Can\'t extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }',
ok: 1,
n: 0,
code: 16572,
errmsg: 'Can\'t extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }',
writeConcernError:
{ code: 16572,
errmsg: 'Can\'t extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }' } }
MongoError: Can't extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }
Als ich mein Modell in der Datenbank zu einem $geoNear
Befehl, den ich meinen Benutzer wie folgt aktualisiert aktualisiert:
loc: {coordinates: [-73.97, 40.77]}
und erfolgreich wie diese Abfrage könnte:
mongoose.model('users').db.db.command({
"geoNear": users,
"near": [
<latitude>,
<longitude>
],
"spherical": true,
"distanceMultiplier": 6378.1, // multiplier for kilometres
"maxDistance": 100/6378.1, // every user within 100 km
"query": { }
(I verwendet db.command seit dem, was ich gelesen habe $geoNear
ist nicht verfügbar bei der Verwendung find()
)
Alles, was ich bisher versucht habe Ich bin nirgendwo, also meine Frage ist jetzt:
- Wie sollte mein Mungo-Modell aussehen?
- wie kann ich speichere einen Benutzer mit seinem Standort in meiner Datenbank
Jede Hilfe wäre sehr willkommen!
danke für Ihre Hilfe! Das Speichern eines Benutzers funktioniert jetzt einwandfrei. Ich schaue mir auch deine "Aggregat" -Implementierung an, sehe viel schöner aus als die Art von Hack, die ich vorher hatte. – Markus
Danke für diese Info, benutze bitte "sphärisch" statt "spärisch" in deinem geo Abfrage. –