MongoDB C# Driver GroupBy 获取同一 属性 的最新对象。 (有聚合)

MongoDB C# Driver GroupBy to get latest object of the same property. (With aggregation)

我有以下模型的集合“评估”:

[BsonCollection("evaluations")]
public class Evaluation : Document
{
    [BsonRepresentation(BsonType.ObjectId)]
    public string AlertId { get; set; }

    public string EvaluationStatus { get; set; }

    public DateTime EvaluatedAt { get; set; }
}

我想做的是检索一个包含每个 Alert 对象的最后评估的列表,这意味着按 AlertId 对评估进行分组,然后获取该组的最新 EvaluatedAt,然后 return 这些评估.
结果是 'Evaluation' 个对象的列表,(每个 AlertId 一个评估)

我如何使用 MongoDB 带聚合的驱动程序构造该查询?

感谢您的帮助!

通过一些研究提出了这个解决方案:

        var alertIds = alertss.Select(x => x.Id.ToString()).ToList();

        var sortByLatest = Builders<Evaluation>.Sort.Descending(x => x.EvaluatedAt);

        var groupByAlertId = new BsonDocument
                  {
                      { "_id", "$AlertId" },
                      { "EvaluationId", new BsonDocument { { "$first", "$_id" } } },
                      { "EvaluationStatus", new BsonDocument { { "$first", "$EvaluationStatus" } } },
                      { "EvaluatedAt", new BsonDocument { { "$first", "$EvaluatedAt" } } },
                  };

        ProjectionDefinition<BsonDocument> projection = new BsonDocument
            {
                {"_id", "$EvaluationId"},
                {"AlertId", "$_id"},
                {"EvaluationStatus", "$EvaluationStatus"},
                {"EvaluatedAt", "$EvaluatedAt"},
            };

        var evaluations = evaluationsRepository.GetCollection().Aggregate()
            .Match(x => alertIds.Contains(x.AlertId))
            .Sort(sortByLatest)
            .Group(groupByAlertId)
            .Project(projection)
            .As<Evaluation>().ToList();

        return evaluations;