MongoTemplate Критерии для запроса на обновление элемента внутри массива объектов - PullRequest
0 голосов
/ 09 февраля 2020

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

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

  • Вопрос1
    • Комментарий1
    • Комментарий2
    • Ответ1
      • CommentForAnswer1
    • Ответ2

| enter image description here |

Моя модель Классы

ВОПРОС. 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;

КОММЕНТАРИЙ. 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);
}

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

Редактировать: MongoDB версия 4.0 (последняя)

...