C#:
_userEventData.Collection().Aggregate()
.Match(p => p.CreateTime >= dateTimePeriod.StartTime && p.CreateTime < dateTimePeriod.EndTime)
.SortByDescending(p => p.CreateTime)
.Group(p => p.UserId, group => new UserDto()
{
UserId = group.Key,
Total = group.Sum(g => g.Value)
})
.ToListAsync();
Java:
Aggregation agg = newAggregation(UserEvent.class,
match(where("createTime").gte(period.getStartTime()).lte(period.getEndTime())),
group("userId").addToSet("userId").as("userId").sum("value").as("total"),
sort(Sort.Direction.DESC, "createTime"));
Flux items = reactiveMongoTemplate.aggregate(agg, "UserEvent",
UserDto.class);
上面两端代码,实现一模一样的功能,一段是用 c#写的,一段是用 java 写的,用 java 对象的字段名需要硬编码,用 c#则不需要,如果工程中有大量类似于上面这种查询代码,后续很难重构,java 中有没有什么方法,当字段名写错的时候就能够在编译器发现?