Я хочу удалить элемент из массива элементов, если какое-то условие выполняется. Например: у меня есть 1000 записей, каждая из которых имеет массив caseDetails
, а внутри у меня много элементов. Я хочу передать caseId
и удалить все caseDetails
элементы, соответствующие этому идентификатору. Ниже приведены данные MongoDB для объяснения, скажем, у меня есть два данных, например, теперь я хочу, чтобы если caseId = 24894006 (который я прошел) вышел (не писать новый запрос) в БД, тогда он должен быть удален.
1) Первые данные БД
{
"_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
}
]
}
Таким образом, в приведенном выше примере вывод в БД должен выглядеть так:
{
"_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
}
]
}
Из caseDetails caseId = 24894006 (весь объект)
Я также закодировал:
@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;
}
Это репозиторий, который я использую
@MongoRepository
public interface EmailRepository
extends ReactiveCrudRepository<Email, String>,
MessageRepositoryCustom {
}