Spring Data Mongo查询嵌套数组对象报错及需求实现
解决Spring Data Mongo数组对象多条件查询报错问题
错误原因
你重复添加针对additionalFields.apiKey和additionalFields.data的查询条件,导致MongoDB的BasicDocument因键名重复抛出异常。同时这种写法的逻辑也不符合需求——它会试图让数组中某个元素的apiKey等于A,某个元素的data等于B,再让某个元素的apiKey等于C,无法保证数组中同时存在两个分别满足完整条件的子对象。
正确查询代码
要实现“数组中同时包含两个特定子对象”的查询,需要用elemMatch匹配每个子对象的完整条件,再通过andOperator组合两个匹配规则:
Query mongoQuery = new Query(); // 组合两个elemMatch条件,要求数组同时存在满足各自规则的元素 Criteria combinedCriteria = new Criteria().andOperator( // 匹配apiKey为yourName763836569且data为KK的子对象 Criteria.where("additionalFields").elemMatch( Criteria.where("apiKey").is("yourName763836569").and("data").is("KK") ), // 匹配apiKey为joiningDate11742346且data为2022-12-21的子对象 Criteria.where("additionalFields").elemMatch( Criteria.where("apiKey").is("joiningDate11742346").and("data").is("2022-12-21") ) ); mongoQuery.addCriteria(combinedCriteria);
代码说明
elemMatch:用于指定数组中至少一个元素要满足的多字段组合条件,确保单个子对象同时匹配apiKey和data的值。andOperator:将两个elemMatch条件组合,要求数组中同时存在满足第一个条件的子对象和满足第二个条件的子对象,完全符合你的查询需求。
内容的提问来源于stack exchange,提问作者Nitin Upadhyay
相关产品推荐
相关产品推荐

