Я выполняю запрос 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;
}
можно ли как-нибудь это сделать? Спасибо за любую помощь!