I want to delete an item from array of items where if some condition gets true.
For eg:
I have 1000's of records which each have caseDetails array and inside that I have many items.
I want to pass in a caseId and delete any caseDetails items that match that id.
Below is the MongoDB data for explanation let say I have two data for example now I want that if caseId=24894006(That i have passed) exits(Not to write new query) in the DB then it should get deleted.
1)First DB data
{
"_id": "60f8fcbe8f67d30784c45561",
"messageType": "e",
"sendDate": "2021-07-22T05:06:04.023Z",
"assigneeId": 600003,
"customerId": 58004,
"subject": "Email Test 1[#24894006]",
"mailAnswered": false,
"hasAttachments": false,
"caseDetails": [
{
"caseId": 24894006,
"employeeId": 600003
},
{
"caseId": 34894006,
"employeeId": 600003
},
{
"caseId": 44894006,
"employeeId": 600003
}
]
},
{
"_id": "60f8fcbe8f67d30784c45561",
"messageType": "e",
"sendDate": "2021-07-22T05:06:04.023Z",
"assigneeId": 600003,
"customerId": 58004,
"subject": "Email Test 1[#24894006]",
"mailAnswered": false,
"hasAttachments": false,
"caseDetails": [
{
"caseId": 24894006,
"employeeId": 600003
},
{
"caseId": 34894006,
"employeeId": 600003
},
{
"caseId": 44894006,
"employeeId": 600003
}
]
}
So as per above example the output in DB should be like:
{
"_id": "60f8fcbe8f67d30784c45561",
"messageType": "e",
"sendDate": "2021-07-22T05:06:04.023Z",
"assigneeId": 600003,
"customerId": 58004,
"subject": "Email Test 1[#24894006]",
"mailAnswered": false,
"hasAttachments": false,
"caseDetails": [
{
"caseId": 34894006,
"employeeId": 600003
},
{
"caseId": 44894006,
"employeeId": 600003
}
]
},
{
"_id": "80f8fcbe8f67d30784c45561",
"messageType": "e",
"sendDate": "2021-07-22T05:06:04.023Z",
"assigneeId": 600003,
"customerId": 58004,
"subject": "Email Test 1[#24894006]",
"mailAnswered": false,
"hasAttachments": false,
"caseDetails": [
{
"caseId": 54894006,
"employeeId": 600003
},
{
"caseId": 64894006,
"employeeId": 600003
}
]
}
From caseDetails caseId = 24894006(Whole object)
I have also coded:
@Override
public List<Email> unlinkMessageCaseDetailsByCaseId(MessageFilter messageFilter) {
Criteria finalCriteria = handleCriteria(messageFilter);
Query query = query(finalCriteria);
// Update update = new Update().pull("caseDetails", Collections.singletonMap("caseId", messageFilter.getCaseId()));
List<Email> uMono = mongoTemplate.find(query, Email.class).collectList().block();
return uMono;
}
This is the repository I'm using
@MongoRepository
public interface EmailRepository
extends ReactiveCrudRepository<Email, String>,
MessageRepositoryCustom {
}