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<UserDto> items = reactiveMongoTemplate.aggregate(agg, "UserEvent",
UserDto.class);
上面两端代码,实现一模一样的功能,一段是用 c#写的,一段是用 java 写的,用 java 对象的字段名需要硬编码,用 c#则不需要,如果工程中有大量类似于上面这种查询代码,后续很难重构,java 中有没有什么方法,当字段名写错的时候就能够在编译器发现?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.