我有一群人.我试图为每个名字找到最老的人.我可以使用mongoDB控制台命令实现该结果db.People.aggregate([{ $sort: { Name: 1, Age: -1 } }, { $group: {_id: $Name,docs: { $push: $$ROOT }...

我有一群人.我试图为每个名字找到最老的人.我可以使用mongoDB控制台命令实现该结果
db.People.aggregate([
{ '$sort': { 'Name': 1, 'Age': -1 } },
{
'$group': {
'_id': '$Name',
'docs': { '$push': '$$ROOT' },
}
},
{
'$project': {
'top_one': {
'$slice': ['$docs', 1]
}
}
} ])
对于C#驱动程序,这相当于什么?我特别遇到麻烦
‘docs’:{‘$push’:’$$ROOT’},
这是我当前的C#查询:
collection.Aggregate(aggArgs)
.SortByDescending(x => x.Age)
.Group(x => x.Name, x => new {
Name = x.First().Name,
FavoriteColor = x.First().FavoriteColor,
FavoriteFood = x.First().FavoriteFood
}).ToListAsync().Result;
它接近我的mongo控制台命令所做的工作,但我真的不喜欢构建一个匿名对象.我更喜欢做Group(x => x.Name,x => x.First()),但是抛出和异常“First()”不受支持.我相信部分问题是我的Person类型没有ID,因此_id被放在实际的mongo文档上(插入时由mongo自动).当它试图回到类型时,它无法进行直接映射.
因此,考虑到查询的两个版本,如何在不必拼出每个字段的情况下将我的完整类型返回到C#中?
解决方法:
这是MongoDB驱动程序的一个功能.它不接受简单的First(),它需要它背后的东西.这就是我通过调试看到的.所以你应该继续使用First()……或者你可以直接查询你的json:
var result = collection.Aggregate()
.Group(new JsonProjectionDefinition<People>(@" {
'_id': '$Name',
'docs': { '$push': '$$ROOT' },}"))
.Project<TopOne>(new JsonProjectionDefinition<BsonDocument>(@"{
'top_one': {
'$slice': ['$docs', 1]
} }"))
.ToList();
本文标题为:MongoDB的push和root的C#等价物是什么?


基础教程推荐
- C#事件中关于sender的用法解读 2023-07-04
- C# 8.0新特性介绍 2022-11-22
- c# Thread类线程常用操作详解 2023-04-09
- 在C#中使用二叉树实时计算海量用户积分排名的实现详解 2023-02-06
- C#中API调用的多种方法 2023-04-27
- 教你C#将CSV转为Excel的实现方法 2023-05-25
- Unity实现模型点击事件的方法 2023-04-14
- Linux服务器部署.Net Core笔记:五、安装Nginx 2023-09-26
- C#中foreach循环对比for循环的优势和劣势 2022-11-14
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16