MongoDB C# 列出子文档中所有条目的最新条目
MongoDB C# List the latest of all entries on a sub document
如果等级是餐厅中的一个数组,是否可以列出所有餐厅及其最新等级?
{
"_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",
}
说明
uses the unwind operator. There's a really simple explanation of it on this answer,有没有人和我一样被搞糊涂了。
一个选项可以通过两个操作进行聚合,一个 Unwind
从输入文档中解构数组字段以输出每个元素的文档,然后通过 date
进行排序操作按降序排列。通过这种方式,您可以获得预期的结果,从聚合结果中选择第一个元素:
var result = collection.Aggregate()
.Unwind(e => e["grades"])
.SortByDescending(e=>e["grades.date"])
.FirstOrDefault();
如果等级是餐厅中的一个数组,是否可以列出所有餐厅及其最新等级?
{
"_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",
}
说明
一个选项可以通过两个操作进行聚合,一个 Unwind
从输入文档中解构数组字段以输出每个元素的文档,然后通过 date
进行排序操作按降序排列。通过这种方式,您可以获得预期的结果,从聚合结果中选择第一个元素:
var result = collection.Aggregate()
.Unwind(e => e["grades"])
.SortByDescending(e=>e["grades.date"])
.FirstOrDefault();