You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:03:12