Spring Data JPA中@Query注解的MongoDB $and查询未按预期生效
问题修正:Spring Data MongoDB 查询数组内嵌套对象的AND条件
你当前的查询逻辑不符合预期的原因是:MongoDB在查询数组的多个属性时,默认会匹配不同数组元素分别满足条件的情况。比如你的查询会返回那些有一个characteristics元素name为指定值,同时另一个characteristics元素value为指定值的Resource,这就导致了类似OR的效果,而非你需要的同一个元素同时满足两个条件。
要实现查询包含同一个ResourceCharacteristics元素同时匹配指定name和value的Resource,需要使用MongoDB的$elemMatch操作符,修正后的@Query语句如下:
@Repository public interface ResourceRepository extends MongoRepository<Resource, String> { @Query("{'characteristics': {$elemMatch: {'name': ?0, 'value': ?1}}}") Optional<Resource> findResourceByMacAddressWithValue(String macAddress, String value); }
$elemMatch的作用是明确要求MongoDB找到至少一个数组元素,同时满足括号内的所有条件,这样就能保证匹配到的Resource包含同时具备指定name和对应value的characteristics元素,实现你需要的AND逻辑。
内容的提问来源于stack exchange,提问作者ss-ss-v1
相关产品推荐
相关产品推荐

