У меня проблемы с запросом к вложенному объекту с двумя параметрами.
Вот мой документ:
@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, так и стейкхолдера.
Я попробовал более простой запрос:
@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);
Но это может вернуть контракт, у которого есть заинтересованная сторона с соответствующим национальным идентификатором и неправильной ролью, а другая заинтересованная сторона с неправильным национальным идентификатором и хорошей ролью, например, так что это не то, чего я хочу.