如何使用spring data mongo更新所有行的特定列

时间:2017-07-17 13:10:55

标签: spring-boot spring-data spring-data-mongodb

我有租户表,一次只能有一个租户。

要激活租户我正在使用以下代码。有没有更好的方法来使用spring data mongo更改所有行的特定列。

        tenantRepository.save(tenantRepository.findAll().stream().map(t -> {
            t.setActive(false);
            return t;
        }).collect(Collectors.toList()));

        tenant.setActive(true);
        tenantRepository.save(tenant);

1 个答案:

答案 0 :(得分:0)

如果要更新Spring数据Mongo中的特定列,只需定义自定义存储库接口及其实现,如:

定义自定义界面

public interface TenantRepositoryCustom {

    Integer updateStatus(List<String> id, TenantStatus status, Date date);
}

实施自定义界面

@Repository
public class TenantRepositoryCustomImpl implements TenantRepositoryCustom{

    @Autowired
    MongoTemplate template;

    @Override
    Integer updateStatus(List<String> id, TenantStatus status, Date date) {
        WriteResult result = template.updateMulti(new Query(Criteria.where("id").in(ids)),
                new Update().set("status", status).set("sentTime", date), Tenant.class);
        return result.getN();
    }

从自定义存储库扩展默认租户存储库:

public interface TenantRepository extends MongoRepository<Tenant, String>, TenantRepositoryCustom{
}

在服务中使用自定义存储库

    @Service
    public class TenantService{
        @Autowired
        TenantRepository repo;

        public void updateList(){
            //repo.updateStatus(...)
        }
   } 

注意:

与使用@Query相比,这不易出错,因为在这里您只需要指定列的名称和值,而不是完整的查询。