У меня есть ниже две структуры документа. В структуре CRMContact.orgGroupId == OrganizationGroup.id. Я хотел бы получить весь документ CRMContact, который совпадает с sharedGroupIds, а также выбрать только несколько полей из CRMContact и только OrganizationGroup.groupownername из OrganizationGroup и сопоставить / заполнить groupId (только с одним полем [ имя_группы ] заполнено). Я использовал ниже пользовательскую реализацию, но не работал.
Я включил aggregarionsNotWorking, который не работает, и aggregarions, возвращающие всю заполненную группу организации. Как этого добиться, т. Е. Просто заполнить поле groupownername, используя spring data mongodb?
@Document(collection = "ww_crm_contact")
public class CRMContact{
@Id
protected String id;
private String displayName;
private String firstName;
private String middleName;
private String lastName;
private OrganizationGroup groupId; //Ignore //Modified field name orgGroupId
@Indexed(name = "CRMCONTACT_SHAREDGROUPID_IDX",background = true)
private List<String> sharedGroupIds = new LinkedList<>();
@Indexed(name = "CRMCONTACT_ORGGROUPID_IDX",background = true)
private String orgGroupId;
}
@Document(collection = "ww_organization_groups")
public class OrganizationGroup {
private static final long serialVersionUID = 600049975643062552L;
@Id
protected String id;
private String groupName;
private int riaId;
private Boolean isPrivate;
private String description;
private Boolean deleted;
@Transient
private int count;
private String groupownerid;
private String groupownername;
}
@Repository
public class CustomCRMContactDAO {
@Autowired
MongoTemplate mongoTemplate;
public List<CRMContact> getContactsPresentInGroup(List<ObjectId> objectIds){
LookupOperation lookupOperation = LookupOperation.newLookup().from("ww_organization_groups").localField("orgGroupId").foreignField("_id").as("groupId");
ProjectionOperation fields = project("firstName","lastName", "primaryId","displayName","groupId.groupownername");
Aggregation aggregarionsNotWorking = Aggregation.newAggregation(Aggregation.match(Criteria.where("sharedGroupIds").in(objectIds)),lookupOperation,unwind("groupId"),fields); //Not Working even if I change the field only to groupownername
Aggregation aggregarions = Aggregation.newAggregation(Aggregation.match(Criteria.where("sharedGroupIds").in(objectIds)),lookupOperation,fields); //
List<CRMContact> crmContacts = mongoTemplate.aggregate(aggregarions, "ww_crm_contact",CRMContact.class).getMappedResults();
return crmContacts;
}
}