MongoDB $ geoNear приводит к отдельному расстоянию от возвращенного документа - PullRequest
0 голосов
/ 29 марта 2020

Я выполняю запрос MongoDB в. NET приложении, которое использует этап агрегации $ geoNear и возвращает список объектов в пределах указанного расстояния. Он возвращает их в следующем формате (я использую результаты со страницы примеров MongoDB для упрощения):

{
   "_id" : 8,
   "name" : "Sara D. Roosevelt Park",
   "location" : {
      "type" : "Point",
      "coordinates" : [
         -73.9928,
         40.7193
      ]
   },
   "category" : "Parks",
   "distance" : 974.175764916902
}

, который по сути является моим типом вывода с добавленным полем «расстояние». Я хочу разделить их на другой класс, чтобы он выглядел следующим образом:

public class EventLocationSearchResult
{
    public Event Event { get; set; }
    public double Distance { get; set; }
}

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

var result = await events
          .Aggregate()
          .AppendStage(GeoHelper.GetGeoNearStage<Event>(lon, lat, distance))
          .Lookup<User, Event>(_usersCollectionName, "memberIds", "id", "Members")
          .ToListAsync();

с GeoHelper.GetGeoNearStage(..), похожим на итак:

public static BsonDocumentPipelineStageDefinition<TNewResult, TNewResult> GetGeoNearStage<TNewResult>(double lon, double lat, double distance, string dbField)
{
    var geoNearOptions = new BsonDocument
    {
        { "near", new GeoJsonPoint<GeoJson2DGeographicCoordinates>(new GeoJson2DGeographicCoordinates(lon, lat)).ToBsonDocument()},
        { "maxDistance", distance },
        { "distanceField", "Distance" },
        { "spherical", true }
    };

    var stage = new BsonDocumentPipelineStageDefinition<TNewResult, TNewResult>(new BsonDocument { { "$geoNear", geoNearOptions } });

    return stage;
}

можно ли как-нибудь это сделать? Спасибо за любую помощь!

...