我是MongoDB的新手,遇到了一些麻烦。如果有人能帮助我,我将非常感激。
我有这样的实体:
class FileRecord {
private ObjectId id;
private String fileId;
private EnumStatus status;
private Long userId;
private Integer year;
etc.
> }
一个文件可以有许多记录,但一年中只能有一个。我需要按条件获取所有最后的文档。
我不知道如何在Spring使它正确,但在mongo查询太,如果说实话)
我明白如何为它制定标准:
var match = match(Criteria.where("userId").in(userIds).andOperator(Criteria.where("status").in(EnumStatus.availableStatues())));
并按最大值分组:
var group = group("fileId", "year").max("year").as("max_year");
但是如何让它在聚合后为我返回Colletion<FileRecord>
的一个查询中查询呢?
如果我试着这样做:
变量聚合= newAggregation(过滤器,组);
AggregationResults<FileRecord> aggregateResult =
mongoOperations.aggregate(aggregation, FileRecord.class, FileRecord.class);
Collection<FileRecord> records = aggregateResult.getMappedResults()
我得到一个异常:
readObjectId can only be called when CurrentBSONType is OBJECT_ID, not when CurrentBSONType is DOCUMENT.;
如果有人有我感兴趣的想法
先谢谢你了
1条答案
按热度按时间wj8zmpe11#
我找到了答案)
我需要创建投影,然后再次向数据库发出请求,并通过id获取我需要的数据。我没有太多这样的数据,所以这个解决方案对我很有效。但是,据我所知,您可以“首先”添加很多数据,然后添加您需要的字段。通过一个请求即可获取所有数据