0

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 {

}
2

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.