Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In der $geoNear-Aggregationsphase werden Abstände zwischen einem angegebenen Punkt und dem Positionsfeld in jedem Dokument berechnet, die Dokumente nach Entfernung sortiert und optional die Ergebnisse nach Entfernung begrenzt.
Syntax
{
$geoNear: {
near: {
type: "Point",
coordinates: [<longitude>, <latitude>]
},
distanceField: <field to store distance>,
maxDistance: <optional maximum distance in meters>,
minDistance: <optional minimum distance in meters>,
query: <optional query conditions>,
includeLocs: <optional boolean to include locations>,
distanceMultiplier: <optional distance multiplier>,
spherical: <boolean, must be true>,
key: <optional field path>
}
}
Die Parameter
| Parameter | Typ | Description |
|---|---|---|
near |
Object | Der Punkt, von dem aus Entfernungen berechnet werden sollen |
distanceField |
String | Das Feld, das berechneten Abstand enthält |
maxDistance |
Number | Wahlfrei. Maximale Entfernung in Metern von Punkt |
minDistance |
Number | Wahlfrei. Mindestabstand in Metern von Punkt |
query |
Dokument | Optionale Abfragebedingungen |
includeLocs |
Boolean | Wahlfrei. Speicherorte in Ergebnisse einschließen |
distanceMultiplier |
Number | Wahlfrei. Multiplizieren von Abständen mit diesem Wert |
spherical |
Boolean | Muss für 2dsphere-Indizes TRUE sein |
key |
String | Wahlfrei. Feldpfad, der zum Berechnen von Entfernungen verwendet werden soll |
Examples
Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.
{
"_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
"name": "First Up Consultants | Bed and Bath Center - South Amir",
"location": {
"lat": 60.7954,
"lon": -142.0012
},
"staff": {
"totalStaff": {
"fullTime": 18,
"partTime": 17
}
},
"sales": {
"totalSales": 37701,
"salesByCategory": [
{
"categoryName": "Mattress Toppers",
"totalSales": 37701
}
]
},
"promotionEvents": [
{
"eventName": "Price Drop Palooza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 30
}
},
"discounts": [
{
"categoryName": "Bath Accessories",
"discountPercentage": 18
},
{
"categoryName": "Pillow Top Mattresses",
"discountPercentage": 17
}
]
}
]
}
Beispiel 1: Grundlegende Entfernungsberechnung
Diese Abfrage ruft alle Speicher in der Nähe des Speicherorts "VanArsdel Picture Frame Store" ab, sortiert nach Entfernung:
db.stores.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [-141.9922, 16.8331] // VanArsdel Picture Frame Store location
},
distanceField: "distance",
spherical: true
}
},
{
$project: {
name: 1,
distance: 1
}
}
])
Die ersten drei Ergebnisse, die von dieser Abfrage zurückgegeben werden, sind:
[
{
"_id": "643b2756-c22d-4063-9777-0945b9926346",
"name": "Contoso, Ltd. | Outdoor Furniture Corner - Pagacfort",
"distance": 5458613.2813355485
},
{
"_id": "daa71e60-75d4-4e03-8b45-9df59af0811f",
"name": "First Up Consultants | Handbag Corner - South Salvatore",
"distance": 5469362.958855379
},
{
"_id": "02a78a15-b1fc-4bbd-ae1d-641b7428dc78",
"name": "VanArsdel, Ltd. | Kitchen Appliance Corner - Llewellynberg",
"distance": 5472684.4628977
}
]
Beispiel 2: Mit Abstandsbeschränkungen und optionaler Abfrage
Diese Abfrage ruft alle Stores innerhalb von 30 KM von "Proseware Home Entertainment Hub" ab, die mehr als 10 Vollzeitmitarbeiter haben:
db.stores.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [69.7296, 70.1272] // "Proseware Home Entertainment Hub" location
},
distanceField: "distance",
maxDistance: 30000, // 30 kilometers in meters
query: { "staff.totalStaff.fullTime": { $gt: 10 } },
spherical: true
}
},
{
$project: {
name: 1,
distance: 1,
"staff.totalStaff.fullTime": 1
}
}
])
Das erste Ergebnis, das von dieser Abfrage zurückgegeben wird, lautet:
[
{
"_id": "bbec6d3e-1666-45b4-8803-8b7ef8544845",
"name": "First Up Consultants | Baby Products Bargains - South Keenan",
"staff": {
"totalStaff": {
"fullTime": 19
}
},
"distance": 29934.71888123174
}
]
Beispiel 3: Einschließen von Standortdaten und Entfernungsmultiplikator
Diese Abfrage ruft Speicher mit Entfernung in Kilometern ab und enthält Standortdaten:
db.stores.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [-38.4071, -47.2548] // "Fabrikam Car Accessory Outlet" location
},
distanceField: "distanceInKm",
includeLocs: "storeLocation",
distanceMultiplier: 0.001, // Convert meters to kilometers
spherical: true
}
},
{
$project: {
name: 1,
distanceInKm: 1,
storeLocation: 1
}
}
])
Die ersten drei Ergebnisse, die von dieser Abfrage zurückgegeben werden, sind:
[
{
"_id": "b677846e-bb73-46ec-9cba-7d94afee382c",
"name": "Northwind Traders | Health Food Shoppe - Brooklynmouth",
"storeLocation": {
"lat": -38.3032,
"lon": -132.7866
},
"distanceInKm": 9.095634270192285
},
{
"_id": "27c64b44-2382-4477-b3ce-c08e74882156",
"name": "Relecloud | VR Headset Gallery - West Jonasbury",
"storeLocation": {
"lat": -37.9628,
"lon": -132.6637
},
"distanceInKm": 34.7104536140246
},
{
"_id": "505e83eb-09bc-46a4-ba85-16135611b9de",
"name": "Fabrikam, Inc. | Pharmacy Hub - Elijahville",
"storeLocation": {
"lat": -38.0349,
"lon": -47.9571
},
"distanceInKm": 82.92766541748313
}
]
Einschränkungen
- Verwendung mit Shardsammlungen nicht möglich
- Nur eine $geoNear-Phase pro Pipeline
- Muss die erste Phase in der Pipeline sein
Verwandte Inhalte
- Überprüfen Sie die Optionen für die Migration von MongoDB zu Azure DocumentDB.
- Weitere Informationen zur Featurekompatibilität mit MongoDB.