Критерии MongoTemplate для запроса для обновления элемента внутри массива объектов

Я пытаюсь добавить комментарий к конкретному ответу, я пробовал разные способы, но комментарии всегда добавляются к родительскому вопросу, но не к ответу в этом вопросе.

Иерархия моей базы данных:

  • Question1
    • Comment1
    • Комментарий2
    • Answer1
      • CommentForAnswer1
    • Ответ2

| введите здесь описание изображения |

Мои классы моделей

ВОПРОС.java

@Document(collection = "QUESTION")
public class QUESTION {
    @Id
    private String questionId;
    private String questionHeader;
    private String questionBody;
    private String byUser; //username
    private Instant postedAt;
    private int upVotes;
    private int downVotes;
    private List<ANSWER> answerObj;
    private List<COMMENT> commentObj;

ОТВЕТ.java

public class ANSWER {
    private String answerId;
    private String answerBody;
    private String byUser; //username
    private Instant postedAt;
    private int upVotes;
    private int downVotes;
    private List<COMMENT> commentObj;

COMMENT.java

public class COMMENT {
    private String commentId;
    private String commentBody;
    private String byUser; //username
    private Instant postedAt;
    private int upVotes;
    private int downVotes;

контроллер

@PostMapping(value = "posts/{questionId}/add")
    public ResponseEntity<?> postComment(@PathVariable String questionId,
                                         @RequestParam(value = "answerId", defaultValue = "") String answerId,
                                         @RequestBody PostCommentRequest postCommentRequest,
                                         Authentication authentication) {
        String username = authentication.getName();
        PostCommentResponse postCommentResponse = postService.postAComment(postCommentRequest, username, questionId, answerId);
        return ResponseEntity.ok().body(postCommentResponse.getMessage());
    }

репозиторий

update.push("commentObj", comment);
try {
    query.addCriteria(answerId.isEmpty() ?
            (new Criteria("questionId").is(questionId)) :
            (new Criteria("answerObj.answerId").is(answerId).andOperator(Criteria.where("questionId").is(questionId))));
    mongoTemplate.updateFirst(query, update, QUESTION.class, QUESTION_COLLECTION);
    return new PostCommentResponse("Successfully updated!", comment);
} catch (Exception e) {
    return new PostCommentResponse("Failed to update, Reason: " + e.toString(), null);
}

Может ли кто-нибудь помочь мне выяснить критерии запроса, который может помещать объект в массив, который находится внутри другого массива объектов.

Изменить: MongoDB версии 4.0 (последняя)


person Gaurav Ghongde    schedule 09.02.2020    source источник
comment
напишите пожалуйста какая у вас версия MongoDB   -  person Valijon    schedule 09.02.2020
comment
Вот аналогичный вопрос (и ответ), но с использованием драйвера MongoDB Java; вы ищете подобную функциональность?: Элемент массива обновления документа MongoDB с использованием метода findOneAndUpdate в Java   -  person prasad_    schedule 10.02.2020