c# - C# MongoDB 从每 n 组中获取 5 条记录
问题描述
您好亲爱的开发人员,
我在使用 MongoDB C# 驱动程序时遇到问题并寻求帮助。
我正在尝试按 machineCode 列对记录进行分组,并从每列中获取 5 条记录。并且还尝试对所有按 insertDate 降序的记录进行排序。
到目前为止,我已经尝试了来自 SO 的几个线程,但在所有尝试中都失败了。
var list = d3TestCollection
.AsQueryable<D3TestData>()
.OrderByDescending(q => q.InsertDate)
.GroupBy(f => f.machinecode)
.Select(f => new D3MachineListResult {
MachineCode = f.Key,
Values = f.Select(q => new D3KeyValueMap { Key = q.Key, Value = q.Value })
.Take(5)
.ToList()
}).ToList();
由于 Take(5),此代码会引发 Method Not Supported 错误。
谢谢你们。
示例集合:
{
"_id" : ObjectId("60a607be339f7c44c0d43b70"),
"key" : "KEY1",
"machinecode" : "3DTEST1",
"value" : false,
"insertDate" : ISODate("2021-05-20T06:54:54.941Z")
},
{
"_id" : ObjectId("60a607be339f7c44c0d43b70"),
"key" : "KEY1",
"machinecode" : "3DTEST2",
"value" : false,
"insertDate" : ISODate("2021-05-20T06:54:54.941Z")
},
{
"_id" : ObjectId("60a607be339f7c44c0d43b70"),
"key" : "KEY2",
"machinecode" : "3DTEST3",
"value" : false,
"insertDate" : ISODate("2021-05-20T06:54:54.941Z")
},
{
"_id" : ObjectId("60a607be339f7c44c0d43b70"),
"key" : "KEY2",
"machinecode" : "3DTEST4",
"value" : false,
"insertDate" : ISODate("2021-05-20T06:54:54.941Z")
}
解决方案
您必须使用聚合然后与项目分组。如果需要对内部数组进行切片,则必须Take
在投影中使用,而不是在分组中使用。
var list = d3TestCollection //IMongoCollection<D3TestData>
.Aggregate() //IAggregateFluent<D3TestData>
.SortByDescending(field: x => x.InsertDate)
.Group(
id: x => x.machinecode,
group: x => new D3MachineListResult
{
MachineCode = x.Key,
Values = x
.Select(z => new D3KeyValueMap
{
Key = z.Key,
Value = z.Value
})
}
)
.Project(
projection: x => new D3MachineListResult
{
MachineCode = x.Key,
Values = x
.Select(z => new D3KeyValueMap
{
Key = z.Key,
Value = z.Value
})
.Take(5)
})
.ToList();
推荐阅读
- python - 通过张量流度量跟踪 SSD 中每个类的误报数
- sql - 如何检查非唯一键是否包含特定值对?
- flutter - 在 _CupertinoTabViewState 中找不到路由 RouteSettings(“/page”, null) 的生成器
- testing - TestCafe oncePerFixture 运行时出错
- stored-procedures - 如何从 SAS 调用 Redhsift 上的存储过程?
- react-native - 如果用户在 20 分钟内未打开新安装的应用,Branch.io 深层链接不会返回数据
- javascript - 如何在反应钩子中从数组中删除对象
- ios - SwiftUI Polyline 不会在用户移动时更新以跟随用户
- c++ - 修复使用枚举来组织事件处理的代码
- c# - 如果在 Animator 中带有参数的函数