Spring Data MongoDB 存储库查询嵌套对象中的多个字段
SpringData MongoDB Repositories Query on multiple fields in nested object
我在使用两个参数查询嵌套对象时遇到问题。
这是我的文档:
@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);
但这可以 return 一个合同有一个利益相关者具有匹配的 nationalId 和错误的角色,而另一个利益相关者具有错误的 nationalId 和好的角色,所以这不是我想要的。
您可以尝试使用 $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);
我在使用两个参数查询嵌套对象时遇到问题。
这是我的文档:
@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);
但这可以 return 一个合同有一个利益相关者具有匹配的 nationalId 和错误的角色,而另一个利益相关者具有错误的 nationalId 和好的角色,所以这不是我想要的。
您可以尝试使用 $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);