MongoDB C# 列出子文档上所有条目中的最新条目

本文关键字:最新 文档 MongoDB | 更新日期: 2023-09-27 18:34:26

如果成绩是餐厅内的数组,是否可以列出所有餐厅及其最新等级?

{
    "_id" : ObjectId("56bf7957b5e096fd06b755b2"),
    "grades" : [ 
        {
            "date" : ISODate("2014-11-15T00:00:00.000Z"),
            "grade" : "Z",
            "score" : 38
        }, 
        {
            "date" : ISODate("2014-05-02T00:00:00.000Z"),
            "grade" : "A",
            "score" : 10
        }, 
        {
            "date" : ISODate("2013-03-02T00:00:00.000Z"),
            "grade" : "A",
            "score" : 7
        }, 
        {
            "date" : ISODate("2012-02-10T00:00:00.000Z"),
            "grade" : "A",
            "score" : 13
        }
    ],
    "name" : "Brunos On The Boulevard",
}

我想得到:

{
    "_id" : ObjectId("56bf7957b5e096fd06b755b2"),
    "grades" : [ 
        {
            "date" : ISODate("2014-11-15T00:00:00.000Z"),
            "grade" : "Z",
            "score" : 38
        }
    ],
    "name" : "Brunos On The Boulevard",
}

解释

下面的答案使用展开运算符。 关于这个答案有一个非常简单的解释,如果有人像我一样对它感到困惑。

MongoDB C# 列出子文档上所有条目中的最新条目

一个选项可以是执行包含两个操作的聚合,一个Unwind从输入文档中解构数组字段以输出每个元素的文档,然后按降序date进行排序操作。通过这种方式,您可以从聚合结果中选择第一个元素来获得预期的结果:

 var result = collection.Aggregate()
                        .Unwind(e => e["grades"])
                        .SortByDescending(e=>e["grades.date"])
                        .FirstOrDefault();