循环为mongodb保留Java中update(“ $ max”)的覆盖值

时间:2019-08-22 05:33:24

标签: java mongodb

我有一个循环,可以遍历一小时内发生的事件。每个事件都有一个称为下限和高度的字段。我的任务是获取每个楼层的最大高度值。我将不胜感激。我也想知道是否可以使用更新中的max方法。

我尝试从更新中使用max方法,但是,当循环不断迭代时,maxHeight总是被覆盖。 我也尝试过使用一些类变量来保存我需要的maxHeight值,但是,每个楼层的maxHeight应该是唯一的,并且使用全局变量会在所有楼层之间返回maxHeight。

Query query = new Query();
Update update = new Update();

events.forEach(event -> {
    getMaxHeight(update, tripEntity, tenant.toLowerCase());
});

mongoTemplate.upsert(query, update, "somecollection");
private void getMaxHeight(Update update, Event event) {
    update.max(event.getFloor(), "maxHeight"), event.getHeight());
}

1 个答案:

答案 0 :(得分:0)

好吧,我最终在循环中使用upsert并使用max。

    events.forEach(event -> {
       Query query = new Query();
       Update update = new Update();
       getMaxHeight(update, tripEntity, tenant.toLowerCase());
       mongoTemplate.upsert(query, update, "somecollection");
    });

    private void getMaxHeight(Update update, Event event) {
    update.max(event.getFloor(), "maxHeight"), event.getHeight());
}