• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

slice의 문제점

21.10.10 19:14 작성 조회수 147

2

안녕하세요 선생님.

$slice 연산자를 사용하려고 구현해보니 몇가지 문제에 직면해서 조언을 얻고자 댓글을 남깁니다.

1. $slice:-10으로 설정 할 경우, database array field에 가장 최근 것이 배열의 마지막 인덱스에 저장되는데 이를 unshift처럼 배열의 첫번째 인덱스에 가장 최신의 것을 저장하면서 $slice -10을 동시에 적용은 안되나요?

왜냐하면 $slice:-10으로 설정 할 경우, 예를 들어 blog의 comment들을 최신순으로 정렬할 시, 첫 로딩시에는 front는 back에서 받은 data중 blog의 comment field를 역순으로 정렬을 구현할 것이고, pagenation을 할 시에는 sort({createdAt:-1})로 정렬을 했다면 정순으로 로직이 구현될텐데, 프론트에서 통일감있게 코드를 구현할 수 있게 하는게 맞는 방향인거 같아서요!

이에 대한 해결책은 back에서 sort({createdAt:1})를 하는 방법일까요?

2.  $slice:-5로 설정하고 data를 삭제할 경우, 예를 들어 comment data는 총 10개가 있고(comment id는 1~10으로 가정) comment field에는 comment id가 6,7,8,9,10인 comment가 저장되있는데 여기서 comment id가 6인 data를 삭제한다면 comment field에는 comment id가 7,8,9,10인 data가 남게됩니다.

이렇게 된다면 blog 화면에 첫 로딩 시, 최신순 5개의 댓글을 불러오고 싶은데 blog의 comment filed에 4개밖에 없으므로 5개의 댓글을 못 불러오게 됩니다.
이에 대한 문제를 해결하기 위한 방법이 있을까요?

감사합니다!

답변 1

답변을 작성해보세요.

1

1. 음 정렬 방법에 따라 내장을 각각 해야되요.

근데 그럴 필요가 아마 없을거에요. 기본값으로 설정된 정렬방법으로만 내장을 해주면 될거 같아요.

이후에 사용자가 정렬 순서나 필터 같은걸 바꾼다면 그 조건에 맞게 comment를 불러오면 되요.

만약 모든 블로그의 기본 정렬을 설정페이지 같은 곳에서 설정 할 수 있게 해준다면 정렬 기준별로 내장하는게 좋을 수도 있어요.

2. https://docs.mongodb.com/manual/reference/operator/update/position/

이 부분 참고해서 하시면 될 것 같아요. 간단한 방법으로는 그냥 블로그 문서를 백엔드로 불러와서 배열을 수정 후 .save()하는 방법도 항상 있고요 :)

Dev님의 프로필

Dev

질문자

2021.10.15

감사합니다 선생님.

1번은 해결하였는데, 2번이 감이 안오네요,,

좀 더 자세한 설명 부탁드려도 될까요??

감사합니다!