MongoDB печать расстояние между двумя точками

Когда я запускаю этот запрос на MongoDB, я получаю все места в непосредственной близости от 500 миль до указанных координат. Но я хочу знать точное расстояние между указанными координатами и местоположением результата.

db.new_stores.find({ "geometry": { $nearSphere: { $geometry: { type: "Point", coordinates: [ -81.093699, 32.074673 ] }, $maxDistance: 500 * 3963 } } } ).pretty()

Мой вывод выглядит так:

{
 "_id" : ObjectId("565172058bc200b0db0f75b1"),
 "type" : "Feature",
 "geometry" : {
 "type" : "Point",
 "coordinates" : [
 -80.148826,
 25.941116
 ]
 },
 "properties" : {
 "Name" : "Anthony Coal Fired Pizza",
 "Address" : "17901 Biscayne Blvd, Aventura, FL"
 }
}

Я также хочу знать расстояние этого места от указанной координаты. Я создал индекс 2dsphere по геометрии.

1 ответ

Вы можете использовать этап агрегации $geoNear для создания расстояния от запрашиваемой точки:

db.new_stores.aggregate([
 { "$geoNear": {
 "near": {
 "type": "Point",
 "coordinates": [ -81.093699, 32.074673 ]
 }, 
 "maxDistance": 500 * 1609,
 "spherical": true,
 "distanceField": "distance",
 "distanceMultiplier": 0.000621371
 }}
]).pretty()

Это позволяет указать "distanceField", который будет вызывать другое поле в выходных документах, содержащих расстояние от запрашиваемой точки. Вы также можете использовать "distanceMultiplier" для применения любого преобразования на выходное расстояние по мере необходимости (от метра до миль и отмечая, что все расстояния GeoJSON возвращаются в метрах).

Существует также команда geoNear с аналогичными параметрами, но она, конечно, не возвращает курсор в качестве вывода.

licensed under cc by-sa 3.0 with attribution.