$geoNear - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

$geoNear

O estágio $geoNear de agregação retorna os documentos em ordem de proximidade a um ponto especificado. Ele calcula a distância do ponto e inclui a distância nos documentos de saída.

Parâmetros

  • near: o ponto a partir do qual calcular distâncias, especificado como GeoJSON ou coordenadas legadas.

  • distanceField: o nome do campo para armazenar a distância calculada.

  • spherical: Booleano indicando se a geometria esférica deve ser usada (necessária para pontos GeoJSON).

  • maxDistance: opcional. Distância máxima do ponto central.

  • minDistance: opcional. Distância mínima do ponto central.

  • query: opcional. Critérios de filtro adicionais a serem aplicados.

  • limit: opcional. Número máximo de documentos a serem devolvidos.

  • key: opcional. Campo a ser usado para consulta geoespacial quando existirem vários índices geoespaciais.

Exemplo (MongoDB Shell)

O exemplo a seguir demonstra o uso do $geoNear palco para encontrar as lojas mais próximas de um determinado local.

Crie documentos de amostra

db.stores.createIndex({ location: "2dsphere" }); db.stores.insertMany([ { _id: 1, name: "Store A", location: { type: "Point", coordinates: [-122.4, 37.8] } }, { _id: 2, name: "Store B", location: { type: "Point", coordinates: [-122.5, 37.7] } }, { _id: 3, name: "Store C", location: { type: "Point", coordinates: [-122.3, 37.9] } } ]);

Exemplo de consulta

db.stores.aggregate([ { $geoNear: { near: { type: "Point", coordinates: [-122.4, 37.8] }, distanceField: "distance", spherical: true } } ]);

Saída

[ { _id: 1, name: 'Store A', location: { type: 'Point', coordinates: [ -122.4, 37.8 ] }, distance: 0 }, { _id: 3, name: 'Store C', location: { type: 'Point', coordinates: [ -122.3, 37.9 ] }, distance: 13877.82 }, { _id: 2, name: 'Store B', location: { type: 'Point', coordinates: [ -122.5, 37.7 ] }, distance: 15557.89 } ]

Exemplos de código

Para ver um exemplo de código para usar o estágio de $geoNear agregação, escolha a guia do idioma que você deseja usar:

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const collection = db.collection('stores'); const result = await collection.aggregate([ { $geoNear: { near: { type: "Point", coordinates: [-122.4, 37.8] }, distanceField: "distance", spherical: true } } ]).toArray(); console.log(result); await client.close(); } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] collection = db['stores'] result = list(collection.aggregate([ { '$geoNear': { 'near': { 'type': 'Point', 'coordinates': [-122.4, 37.8] }, 'distanceField': 'distance', 'spherical': True } } ])) print(result) client.close() example()