Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’opérateur $geoWithin sélectionne les documents dont le champ d’emplacement se trouve entièrement dans une géométrie spécifiée. Cet opérateur prend en charge différents opérateurs de forme, notamment $box, $polygon, $center et $geometry.
Syntax
// Using $box
{
<location field>: {
$geoWithin: {
$box: [ [ <bottom left coordinates> ], [ <upper right coordinates> ] ]
}
}
}
// Using $center
{
<location field>: {
$geoWithin: {
$center: [ [ <x>, <y> ], <radius> ]
}
}
}
// Using $geometry
{
<location field>: {
$geoWithin: {
$geometry: {
type: <GeoJSON type>,
coordinates: <coordinates>
}
}
}
}
Parameters
| Parameter | Description |
|---|---|
location field |
Le champ qui contient les coordonnées d’emplacement |
$box |
Deux ensembles de coordonnées qui définissent les coins opposés d’une zone |
$center |
Coordonnées du point central et rayon en degrés |
$geometry |
Objet GeoJSON qui définit la limite |
Examples
Comprenons l’utilisation avec un exemple json à partir du jeu de données stores.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Exemple 1 : Rechercher des magasins définis par $box
Pour obtenir de meilleures performances, vérifiez que vous disposez d’un 2dsphere index.
db.stores.createIndex({ location: "2dsphere" })
Cette requête recherche des magasins situés dans une zone rectangulaire spécifique sur une carte, définie par une zone (rectangle englobant).
db.stores.find({
location: {
$geoWithin: {
$box: [
[65.0, 65.0], // Bottom left corner
[75.0, 75.0] // Top right corner
]
}
}
}, {
name: 1,
location: 1
}).limit(2)
Les deux premiers résultats retournés par cette requête.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296,
"address": "123 Entertainment Blvd",
"city": "East Linwoodbury"
}
},
{
"_id": "fc286536-cb94-45aa-b975-7040fde04cf7",
"name": "First Up Consultants | Medical Supply Corner - South Elnoraview",
"location": {
"lat": 72.2184,
"lon": 68.9829
}
}
]
Exemple 2 : Rechercher des magasins définis par $center
La requête utilise un $geoWithin opérateur pour rechercher des magasins dans une zone circulaire définie par un point central et un rayon.
db.stores.find({
'location': {
$geoWithin: {
$center: [
[-82.5543, -65.105], // Center point (Wide World Importers location)
5 // Radius in degrees
]
}
}
}, {
name: 1,
location: 1
}).limit(2)
Les deux premiers résultats retournés par cette requête sont les suivants :
[
{
"_id": "3e962dd0-dffb-49d6-8a96-1d29fa1553d2",
"name": "Tailwind Traders | Book Center - Lake Marlen",
"location": { "lat": -85.4034, "lon": -65.9189 }
},
{
"_id": "7e442816-be4c-4919-8f67-d1e9162a511f",
"name": "Proseware, Inc. | Outdoor Furniture Bargains - North Obieberg",
"location": { "lat": -84.1013, "lon": -69.5717 }
}
]
Exemple 3 : Rechercher des magasins définis par $geometry
Cette requête recherche jusqu’à deux magasins dont l’emplacement se trouve dans le polygone rectangulaire défini.
db.stores.find({
'location': {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[
[-85.0, -70.0],
[-85.0, -60.0],
[-75.0, -60.0],
[-75.0, -70.0],
[-85.0, -70.0]
]]
}
}
}
}, {
name: 1,
location: 1
}).limit(2)
Les deux premiers résultats retournés par cette requête sont les suivants :
[
{
"_id": "66fd4cdd-ffc3-44b6-81d9-6d5e9c1f7f9a",
"name": "Trey Research | Health Food Center - North Michelle",
"location": { "lat": -77.9951, "lon": -62.7339 }
},
{
"_id": "ea3f775b-f977-4827-ada4-ca7fd8ed0cd4",
"name": "VanArsdel, Ltd. | Outdoor Equipment Pantry - Port Aleenton",
"location": { "lat": -76.4516, "lon": -67.2051 }
}
]
Contenu connexe
- Passez en revue les options de migration de MongoDB vers Azure Cosmos DB pour MongoDB (vCore).
- En savoir plus sur la compatibilité des fonctionnalités avec MongoDB.