몽구스 시퀀스 관련 질문
547
작성한 질문수 10
안녕하세요.
게시글에 1부터 시작하는 넘버를 부여하고 싶어서 몽구스의 시퀀스 기능을 찾아봤는데, 자체적인 auto increment 기능은 없고 몽구스 시퀀스 라이브러리를 이용해야 하더라고요.
잘 이해가 안 가서 그냥 _id로 게시글 번호를 줘버렸더니, 해당 게시글의 _id를 못 찾았을 경우 (예를 들어 _id를 엔드포인트로 하는 경로가 틀렸을 경우) throw new UnauthorizedException 에러가 아니라 500 에러를 띄워서.. 왜 500 에러가 뜨는지도 모르겠고 예상과는 다른 에러에 다시 시퀀스 방법을 찾아보는 중입니다.
관련해서 상석 님이 답변해주신 게시물도 읽어 봤는데, 이 몽구스 시퀀스를 어떻게 활용하는 건지 감이 전혀 잡히지 않아 질문하게 되었습니다. 혹시 몽구스 시퀀스 코드를 어디서 (서비스라든지 스키마라든지) 작성해야 하는지 간단한 예제를 보여 주실 수 있으실까요? ㅠ 아직 초보라서 활용 방법이 너무 어렵네요 ㅠㅠ...
https://github.com/ramiel/mongoose-sequence
답변 1
1
안녕하세요!
플러그인을 사용할 경우 예시는 아래 링크를 참조해주세요!
https://stackoverflow.com/questions/62824276/auto-increment-sequence-in-nestjs-mongoose
외부 플러그인을 사용하는 방법도 있지만 공식문서에서 제시하는 방식은 아래와 같습니다.
https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/
해당 문서에서 설명하는 과정을 큰 그림으로 그리면 아래와 같습니다.
1. db에 counters라는 collection을 만들고 "userid" 값을 가지는 _id를 지정해주고 증가시킬 seq 값을 default 값을 0으로 둡니다.
2. 공식문서에서 설명하는 getNextSequence 라는 함수를 만들고 임의의 collection이 저장되기 전에 hook을 걸어줍니다.. (mongoose에서 제공하는 pre 함수를 사용하면 됩니다.)
몽고디비 특성상 _id는 ObjectID 타입으로 그대로 두는 것을 권장드립니다.
0
그냥 object _id 값 그대로 사용하는 방법으로 해결했습니다! 그런데 주신 링크에 대해 궁금한 점이 있습니다.
해당 문서의 코드를 mongosh에 복사 붙여넣기 하면 _id값이 수정되고 디비에 저장도 되는데, 결국 이걸 nest에서 어떻게 사용하는지를 모르겠습니다. 지금까지 nest의 서비스단에서 this.~~Model.create() 같은 방식으로 db에 값을 넣어줬었는데, getNextSequence 함수를 보면 db.counters.findAndModify라고 되어 있어서 counters라는 스키마를 새로 만들어야 하는 건지, this.counters 이렇게 접근해야 하는 건지, getNextSequence 함수는 서비스단에서 사용하면 되는 건지 이런 게 잘 잡히지 않네요.. ㅠㅠ
0
제가 만일 해당 방식을 프로젝트에 적용한다면, counters라는 스키마를 따로 만들어 정의하고 getNextSequence 함수를 따로 만들어서 create할때 DI가 아닌 직접 호출해서 사용할 것 같습니다. 혹은 해당 메서드를 모듈화해서 개발자 친화적으로 커스텀 모듈을 만들어서 DI가능하도록 만드셔도 좋습니다.
프로젝트 환경 세팅할 때 최신 노드 버젼을 사용하시는 분들은 참고하셔도 좋을 것 같아요~
2
101
1
DTO에 대한 질문
1
97
2
백엔드 MVC에서 View의 역할은 무엇인가요?
1
111
2
추가 업데이트 관련 건
0
105
2
nest js 버전문제
0
95
2
mongdb 스키마 공식 문서와 형태가 다른 이유 궁금합니다.
0
113
1
라인 끝에 에러 표시(eslint) 때문에 구글 찾아 보니.
0
83
1
전체 고양이 조회 라우터 중 error.message 오류
0
82
1
캡슐화 추가 설명 중 단일책임원칙 관련 질문
0
115
0
42강 고양이끼리 소통 댓글 구현 중 Schema hasn't been registered for model 'comments' 에러 해결
0
86
1
채팅 이슈
0
137
1
모듈이 더 이상 지원하지 않는답니다
0
216
1
오류가 있습니다
0
114
1
import 에서 오류가 납니다
0
131
1
이런 오류가 나옵니다
0
106
1
에러가 발생합니다
0
117
1
프론트 에러 뜨는데 수정 안해주시나요
0
166
1
emit() broadcast.emit() 질문있습니다
0
107
1
서버연결이 안됩니다.
1
408
1
[PM2][ERROR] Command not found
0
528
1
S3에 업로드까지는 성공했는데 사진이 나오지 않습니다.
0
254
1
error_code : Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)
0
607
1
jwt를 따로 연습하고 있는데 env를 못읽는 것 같습니다.
0
330
2
Ec2로 안하시는 이유가 있을까요?
0
345
1





