Я пытаюсь получить массив всех точек из отчетов, чтобы их можно было сопоставить. Для этого мне нужна раскрутка / проекция, но я изо всех сил пытаюсь обойти это.
Результат отформатирован так:
"totalPoints": 200,
"points": [
{
"itemId": "5e9592edb4959a52b8493f6d",
"itemName": "Numquam hic minus repellat sequi.",
"name": null,
"longitude": null,
"latitude": null
},
...
Как видите, я ' m получает пустые значения для трех нижних элементов.
Вот запрос, который я использую
var points = await _reportDocs.Aggregate()
.Match(filter.GenerateFilter())
.Unwind<IntelReport, IntelReportLocationUnwound>(x => x.Locations)
.Project(x => new LocationDto
{
ItemId = x.Id,
ItemName = x.Name,
Name = x.Location.Name,
Latitude = x.Location.Point.Coordinates[1],
Longitude = x.Location.Point.Coordinates[0]
})
.ToListAsync();
Вот исходный класс отчета (но я взял некоторые вещи, которые не были ' здесь нужно)
public class IntelReport
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string ReportTitle { get; set; }
public ICollection<Location> Locations { get; set; }
}
и классы, которые, как мне показалось, мне нужно, чтобы сделать раскрутку ...
public class LocationDto
{
[BsonRepresentation(BsonType.ObjectId)]
public string ItemId { get; set; }
public string ItemName { get; set; }
public string Name { get; set; }
public double? Longitude { get; set; }
public double? Latitude { get; set; }
}
[BsonIgnoreExtraElements]
public class IntelReportLocationUnwound
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("ReportTitle")]
[BsonIgnoreIfDefault]
public string Name { get; set; }
[BsonElement("locations")]
[BsonIgnoreIfDefault]
public LocationForAgg Location { get; set; }
}
public class LocationForAgg
{
[BsonElement("name")]
[BsonIgnoreIfDefault]
public string Name { get; set; }
[BsonElement("point")]
[BsonIgnoreIfDefault]
public PointForAgg Point { get; set; }
}
public class PointForAgg
{
[BsonElement("coordinates")]
[BsonIgnoreIfDefault]
public double[] Coordinates { get; set; }
}