我在查询带有两个参数的嵌套对象时遇到了问题。
以下是我的文档:
@Document(collection = "contracts")
public class Contract {
@Id
String _id;
List<Stakeholder> stakeholders;
Long contractRef;
}下面是我的嵌套对象:
public class Stakeholder{
String nationalId;
String stakeholderRole;
}我使用mongoRepository来查询这个集合:
public interface ContractRepository extends PagingAndSortingRepository<Contract, String> {
@Query( value = "{'countryBranchCode' : ?0, 'contractRef' : ?1, 'stakeholders' : {'nationalId' : ?2, 'stakeholderRole' : ?3} }",
fields = "{'stakeholders.$.':1}")
Contract findStakeholderByContractRefAndNationalIdAndStakeholderRole
(String countryBranchCode, Long contractRef, String nationalId, String stakeholderRole);基本上,我希望找到一个与contractRef和nationalId和stakeholderRole都匹配的利益相关者的合同。
我尝试了一个更简单的查询:
@Query( value = "{'countryBranchCode' : ?0, 'contractRef' : ?1, 'stakeholders.nationalId' : ?2, 'stakeholders.stakeholderRole' : ?3 }",
fields = "{'stakeholders.$.':1}")
Contract findStakeholderByContractRefAndNationalIdAndStakeholderRole
(String countryBranchCode, Long contractRef, String nationalId, String stakeholderRole);但这可能会返回一个契约,该契约包含一个具有匹配的nationalId和错误角色的涉众,以及另一个具有错误nationalId和良好角色的涉众,因此这不是我想要的。
发布于 2019-01-23 16:42:11
您可以尝试使用$elemMatch
@Query( value = "{'countryBranchCode' : ?0,'contractRef':?1,'stakeholders':{'$elemMatch':{'nationalId':?2,'stakeholderRole':?3}}}",
fields = "{'stakeholders.$.':1}")
Contract findStakeholderByContractRefAndStakeholderRoleAndNationalId (String countryBranchCode, Long contractRef,String stakeholderRole, String nationalId);https://stackoverflow.com/questions/54310133
复制相似问题