Verwenden Sie raumbezogene Abfragen in MongoDB-kompatiblen Vorgängen, um Dokumente abzufragen, die sich innerhalb eines bestimmten Bereichs von einem bestimmten Längen- und Breitengrad befinden.
Hinweis
Prüfen Sie, ob Sie Zugriff auf eine vorhandene MongoDB-kompatible Betriebsdatenbank haben, oder erstellen Sie eine Datenbank und stellen Sie eine Verbindung zu ihr her.
Prüfen Sie, ob mindestens ein 2dsphere-Index vorhanden ist, oder erstellen Sie einen 2dsphere-Index.
GeoJSON-Objekte
Wenn Sie eine Geodatenabfrage für Felder in Ihrer Sammlung ausführen möchten, müssen die abgefragten Felder GeoJSON-Objekte oder GeoPoints sein.
Geodatenabfrage ausführen
Sie können eine raumbezogene Abfrage mit dem Operator $near ausführen, der die Entfernung eines Geopunkts relativ zu Geopunkten in Dokumenten berechnet. Diese Dokumente werden dann in den Abfrageergebnissen von der geringsten bis zur größten Entfernung sortiert. Sie können diese Sortierreihenfolge auch überschreiben, indem Sie in Ihrer Abfrage eine sekundäre Sortierung definieren, die nicht $natural ist. Der Operator $near muss in einem Dokumentfeld im Abfragefilter vorhanden sein und ein GeoJSON-Feld $geometry enthalten.
Im folgenden Beispiel wird der Operator $near verwendet, um die Entfernung zwischen dem Geopunkt (-122.084, 37.4221) und den Geopunkten im Feld location aller Dokumente in myCollection. zu berechnen. Die Dokumente werden zurückgegeben und nach der Entfernung zwischen den beiden Punkten sortiert, von der kürzesten bis zur längsten Entfernung.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
Mit den optionalen Feldern $maxDistance und $minDistance können Sie auch die Entfernung in Metern vom Punkt Ihrer Abfrage steuern.
Das folgende Beispiel zeigt eine Abfrage, bei der die zurückgegebenen Dokumente mindestens 500 Meter und höchstens 2.000 Meter vom Punkt (-122.084, 37.4221) entfernt sein müssen:
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
Wenn Ihr Index partitioniert ist, können Sie nach der Partition filtern, indem Sie die Partition in einen „and“-Gleichheitsfilter in Ihrer Abfrage einfügen.
Wenn Sie beispielsweise eine region-Partition haben und Ihre Abfrageergebnisse nach der Region midwest filtern möchten, können Sie so vorgehen:
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
Der Wert der Partition muss ein String sein. Der Partitionsfilter muss mit einem $and-Operator mit der Suchanfrage verknüpft werden.
Beschränkungen
$near- und$text-Operatoren können nicht in derselben Abfrage verwendet werden.$nearkann nicht in einer$or-Anweisung mit mehreren Klauseln verschachtelt werden, es sei denn,$nearist der einzige Ausdruck in der$or-Klausel.$nearkann in einer Abfrage nicht mit den Operatoren$notoder$norverwendet werden.$nearwird in Aggregationsabfragen nicht unterstützt.