给予一个mongodb查询,以更新名为“auth_otp”的数据库表中某些行的状态。它会将与所提供的otpStatus和otpType匹配的行的状态更改为“INACTIVE”尝试了这个- @Query(“查询'ao. status':?0,'ao.otp_type':?1}”) void updateOtpStatus(String otpStatus,String otpType);预期-需要更新行或更新数据
fwzugrvs1#
一般性评论:这看起来像是你试图同时合并一个命令(改变状态)和一个查询(检索状态)。这通常是不推荐的,但当然我不知道你的确切用例。也就是说,如果您的查询位于扩展MongoRepository的存储库中,则可以执行保存、查找、删除、计数、存在等操作。(并使用实体的属性来自定义这些方法,请参见定义查询方法。但是,如果你想利用更具体的MongoDB功能,如更新或更新,你最好使用MongoTemplate或MongoOperations。
MongoRepository
MongoTemplate
MongoOperations
@Component public class RepositoryImpl { private final MongoTemplate mongoTemplate; public RepositoryImpl (MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } public void updateMulti(...) { Query query = new Query(); query.addCriteria(...); Update update = new Update(); update.set(...); UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Entity.class); } }
请注意,update、updateMulti或upsert不会返回更新的数据,但可以从UpdateResult获取modifiedCount。
update
updateMulti
upsert
UpdateResult
1条答案
按热度按时间fwzugrvs1#
一般性评论:这看起来像是你试图同时合并一个命令(改变状态)和一个查询(检索状态)。这通常是不推荐的,但当然我不知道你的确切用例。
也就是说,如果您的查询位于扩展
MongoRepository
的存储库中,则可以执行保存、查找、删除、计数、存在等操作。(并使用实体的属性来自定义这些方法,请参见定义查询方法。但是,如果你想利用更具体的MongoDB功能,如更新或更新,你最好使用
MongoTemplate
或MongoOperations
。请注意,
update
、updateMulti
或upsert
不会返回更新的数据,但可以从UpdateResult
获取modifiedCount。