SMAIVNN
article thumbnail
[NestJs/트러블슈팅] mongoDB document 반환
Web 2023. 11. 20. 11:17

발단 프로젝트에서 아래 간단한 코드를 실행하던 도중 서버 오류가 발생하였다. 우선 발단이 된 코드는 다음과 같다. async createStat(stat: CreateStatDto): Promise { const newStat = { ...stat, }; const createdStat = await this.statModel.create(newStat); return createdStat } 발생한 서버 오류는 다음과 같다. [MyApp] error 2023-11-20 09:48:40 [ExceptionsHandler] callback is not a function - { stack: [ 'TypeError: callback is not a function\n' + ...code... 처음에는 인터셉..

article thumbnail
[NestJs/트러블슈팅] NestJs에서 mongoDB find(), virtual field
Web 2023. 10. 26. 18:59

더 공부하고 정리한 추가 게시물이 있습니다. node.js의 Express와 nestJs에서의 mongoDB find()메서드 차이점 mongoose의 find()메서드를 Express환경에서 사용할 경우 다음과 같이 출력된다. [ { "_id": "id항목입니다", "title": "test2", "content": "toDo Contents2", "status": true, "priority": 0, "dueDate": "2024-03-21T00:00:00.000Z", "category": "sports", "completedDate": "2023-10-25T07:59:36.295Z" }, ] 반면nestJs에서 find()를 사용할 경우 다음과 같이 메타데이터들이 출력된다. [ { "$__": { ..

article thumbnail
[mongoDB] 집계 프레임워크
Database 2023. 3. 25. 18:08

집계 프레임워크란? 집계 프레임워크의 설명을 보고 사실 잘 이해가 가지 않았다. 그래서 나는 조금더 쉬운 설명을 위해 bing AI에게 물어보았고, 답을 얻을 수 있었다. 결론적으로 집계 프레임워크는 컬렉션에 있는 여러 도큐먼트의 데이터를 다양한 방식으로 결합해서 새로운 데이터를 만드는 쿼리 언어라고 이해했다. 집계 프레임워크는 파이프라인 개념을 기반으로 한다. 파이프라인이랑 위 사진에도 나와 있듯이 데이터 처리를 여러 단계로 나누어 처리하는 방식이며, 각 단계에서 입력 데이터를 처리하여 출력 데이터를 만들어 다음 단계로 전달한다. 파이프라인에는 대표적으로 일치, 선출, 정렬, 건너뛰기, 제한 단계가 있다. 사용하는 방법 집계 쿼리를 사용하기 위해서는 aggregate라는 메서드를 호출해야 한다. 파이프..

article thumbnail
[mongoDB] 인덱스
Database 2023. 3. 24. 22:14

인덱스란? 인덱싱은 책의 목차와 같다. 원하는 데이터를 찾고자 처음부터 끝까지 찾는게 아닌, 목차를 보고 원하는 부분으로 바로 가서 찾는 것으로 이해하면 좋다. 이처럼 자주 조회되는 필드(데이터)에 대해 따로 저장을 진행하여 탐색 속도를 빠르게 한다. 따로 저장을 진행하므로 일정 용량을 차지한다. 언제 사용하는가? 정의만 보면 좋아보이지만, 단점이 명확히 있다. 인덱싱 된 필드에 쓰기(삽입, 갱신, 삭제)작업은 오래 걸린다는 것이다. 쓰기 작업 이후 데이터가 변경될 때 마다 도큐먼트만이 아닌 모든 인덱스를 갱신한다. 적합한 쿼리 구성 인덱스를 진행할 필드의 선정은 자주쓰는 쿼리, 빨리 수행해야 하는 쿼리를 조사해 공통적인 키 셋을 찾아 진행하도록 한다. 독특한 쿼리, 관리자에 의해 실행되는 쿼리 등 소요..

article thumbnail
[mongoDB] 쿼리
Database 2023. 3. 17. 23:06

조건 쿼리 $lt, $lte, $gt, $gte 각각 =에 대응한다. // 18세에서 30세 사이의 사용자 model.find({"age" : {"$gte" : 18 "$lte" : 30}}); $ne not equal로 같지 않음을 표현 // john이 아닌 모든 사용자 model.find({"name" : {"$ne" : "john"}}) $in, $or 조건에 일치하는 도큐먼트를 찾는다. $in은 다른 데이터형도 사용 가능하다. 반대로 배열 내 조건과 일치하지 않는 도큐먼트는 $nin // $in // 이름이 smaivnn이거나 potpae인 사용자를 찾는다. model.find({"name" : {"$in" : ["smaivnn", "potpae"]}}) $or은 조건들의 배열을 취한다. 또한 다..

article thumbnail
[mongoDB] 갱신 연산자
Database 2023. 3. 15. 22:16

도큐먼트의 특정 부분만 갱신할 때 갱신 연산자를 사용한다. $set 필드 값을 설정한다, 필드가 존재하지 않으면 새 필드를 생성한다. model.updateOne( {}, {"$set" : {"newField" : "thisIsNew" }} // 새로운 필드 생성 ) model.updateOne( {}, {"$set" : {"newField" : "chageField" }} // 필드 내용 변경 ) model.updateOne( {}, {"$set" : {"author.name" : "johnDoe" }} // 내장 도큐먼트 이용시 ) $inc 키의 값을 증가시킨다. 키가 없다면 새 필드 생성 후 해당 값 만큼 0에서 더한다. $set과 비슷하지만 숫자를 증감하기 위해 존재한다. model.updateO..