Как вернуть расстояние по результату в двух разных вложенных значениях, используя $ geoNear - PullRequest
2 голосов
/ 10 февраля 2020

У меня есть этот запрос:

db.places.aggregate([
   { "$geoNear" : 
      { "near" : 
         { 
            "type" : "Point", "coordinates" : [23, 11] 
         }, "distanceField" : "distance",
          "spherical" : true 
      } 
   },
   { 
      "$sort" : 
      { "distance" : 1 } 
   },
   { 
      "$limit" : 10 
   }
])

, который будет возвращать

{
    "_id":ObjectId("XXXX"),
    "longitude":23.11,
    "latitude":11.1995,
    "distance":23.111995
}

Однако, в таких языках, как C#, десериализация в разрывах, так как "расстояние" не часть класса C# возвращенного документа.

Как бы я мог получить результат, подобный следующему?

{
    "document": {
        "_id":ObjectId("XXXX"),
        "longitude":23.11,
        "latitude":11.1995
    },
    "distance":23.111995
}

Спасибо за любую помощь

1 Ответ

2 голосов
/ 10 февраля 2020

Вы можете запустить $ project , чтобы изменить результаты агрегации. $$ROOT представляет документ, который передается на этап конвейера в качестве ввода:

db.places.aggregate([
    { "$geoNear" : { "near" : { "type" : "Point", "coordinates" : [23, 11] }, "distanceField" : "distance", "spherical" : true } },
    { "$sort" : { "distance" : 1 } },
    { "$limit" : 10 },
    { "$project:": { "document": "$$ROOT", "distance": 1 } },
    { "$project": { "document.distance": 0, "_id": 0 } }
])
...