c# - C#中按第一项分组的MongoDb数据查询
问题描述
我想使用 C# 在 mongodb 中运行一个查询,即 MongoDB 有一个类似的数据
{name: Mr X, submitted_date: 20210821},
{name: Mr Y, submitted_date: 20210920},
{name: Mr X, submitted_date: 20211010},
{name: Mr Y, submitted_date: 20210317},
{name: Mr Z, submitted_date: 20210903}
我想运行一个查询,它会返回,
{name: Mr X, submitted_date: 20211010},
{name: Mr Y, submitted_date: 20210920},
{name: Mr Z, submitted_date: 20210903}
表示根据最新提交的日期按结果分组
我已经用 C# 编写了这段代码。但无法弄清楚如何按名称获取最新提交的值和组。
public List<Customer>(List<string> nameList)
{
var filter = Builders<Customer>.Filter.Empty;
if (nameList.Count > 0)
{
filter = filter & Builders<Customer>.Filter.In(x => x.name, nameList);
}
var sort = Builders<Customer>.Sort.Descending("submitted_date");
//Should be something for my expected result
return _collection.Find(filter).Sort(sort).ToList();
}
解决方案
使用这个聚合
db.collection.aggregate([
{
$sort: {
submitted_date: -1
}
},
{
"$group": {
"_id": "$name",
"submitted_date": {
$first: "$submitted_date"
}
}
},
{
"$project": {
name: "$_id",
submitted_date: 1,
_id: 0
}
}
])
推荐阅读
- python - Selenium:网站中的特定页面出现空白/白屏
- amazon-web-services - AWS CLI 列出所有 S3 存储桶的加密状态
- php - 删除 url 中的文件扩展名不起作用
- javascript - 模拟类似于 GOTO 的命令的标签
- javascript - 推送新对象时,对象中的嵌套数组最后一个元素被删除
- google-api - Google Classroom API 访问要求
- angular - Angular,RxJs,初始化组件的子变量
- node.js - 服务器没有向前端发送正确的响应?
- ruby - 新手 Ruby 问题 - 项目基础计算器
- sql - 由于未找到标识符,存储过程插入表无法正常工作