MongoTemplate分组排序取第一条记录

更新时间:2023-06-18 10:18:42 阅读: 评论:0

MongoTemplate分组排序取第⼀条记录MongoTemplate分组排序取第⼀条记录
在开发过程中,竟然遇到这样⼀个需求,按照某⼀个字段或者某个查询条件进⾏分组。分组后取其最新的⼀条数据。
例如:在查询⽂件版本时,要求根据⽂件路径filePath分组,表⽰每⼀组都是同⼀个⽂件,只是版本不同。分组后,每组取出版本号最⾼(即最新)的⼀个。
⽬前在⽹上找到的可⾏的代码如下,Aggregates.match⽬前只⽀持对某个字段过滤,⽀持多条件查询暂时不知如何处理。
public List<StreamFile>findRootChildrenByStreamId(String projectId, String streamId, String parentId){
AggregateIterable<Document> aggregateIterable = Template(projectId).CollectionName(StreamFile.class))
.aggregate(Arrays.asList(
// 按照parentId列表过滤记录
Aggregates.match(Filters.in(StreamFile.FIELD_parentId, streamId)),
// 按照version降序排序
Aggregates.sort(new Document().append(StreamFile.FILED_version,-1)),
// 根据orderId分组
new Document("_id","$"+StreamFile.FILED_fullPath),
usb启动盘制作
Arrays.asList(
粗壮造句// 取分组第⼀条数据,即version最⼤的那条,放到doc字段⾥,供后续的replaceRoot替换⽤
一百条裙子Accumulators.first("doc","$$ROOT"))
),
// 如果你的API中有placeRoot,直接使⽤就可以了
问问题英语
如何说话
)
);
List<StreamFile> list =new ArrayList<>();
for(Document document : aggregateIterable){
// 遍历document进⾏处理
Object streamID = (StreamFile.FILED_streamId);
Object parentID = (StreamFile.FIELD_parentId);
Object fullPath = (StreamFile.FILED_fullPath);
Object version = (StreamFile.FILED_version);
南瓜做法
StreamFile streamFile =new StreamFile();
streamFile.tStreamId((String) streamID);鱼和豆腐
streamFile.tParentId((String) parentID);
丰收在望打一字
streamFile.tFullPath((String) fullPath);
streamFile.tVersion((Integer) version);
list.add(streamFile);
}
return list;
}

本文发布于:2023-06-18 10:18:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1043868.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分组   查询   条件   字段   记录
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图