본문 바로가기
728x90
반응형

Back Side/DBMS > MongoDB12

[MongoDB] mongoose의 populate을 이용해서 편하게 다른 컬렉션 정보 가져오기 지금 누가 join하고 웃었는가? join은 관계형 데이터베이스에서 많이 쓰인다. SQL에서 join을 사용하면 두 테이블 간의 관계를 기반으로 데이터를 결합하여 결과를 반환한다. 그럼 MongoDB는? $lookupd이라는 Aggregation 연산자가 있긴하다. db.users.aggregate([ { $lookup: { from: "orders", // 결합할 다른 컬렉션 localField: "_id", // 현재 컬렉션의 필드 foreignField: "userId", // 다른 컬렉션의 필드 as: "userOrders" // 결과를 저장할 필드 이름 } } ]); 직접적이고 유연한 방법을 제공하지만 복잡한 쿼리를 작성해야 한다. 이때 mongoose의 populate를 쓰면 좋다. mongo.. 2023. 12. 8.
[MongoDB] 오늘 작성한 글만 나오게 하기 $regex 쓰면 되지 않을까? '오늘 작성한 글만 나오게' 라는 조건을 생각하자마자 MongoDB의 $regex 쿼리가 생각났다. $regex는 MongoDB에서 정규식을 쓰게 해주는 쿼리이고, 정규식은 문자열에 포함된 문자 조합을 찾기 위해 사용되는 패턴이다. const todayDate = new Date(); const getFullYear = todayDate.getFullYear(); const getMonth = todayDate.getMonth(); const getDay = todayDate.getDay(); const findDate = getFullYear + "-" + getMonth + "-" + getDay; const allBusinessData = await Bussiness.. 2023. 2. 8.
[MongoDB] 대량의 데이터 처리 프로그래밍 모델 (1) 맵리듀스 map-reduce 맵리듀스(map-reduce)란 맵리듀스는 많은 컴퓨터에서 대량의 데이터를 처리하기 위한 프로그래밍 모델로, 구글에 의해 널리 알려졌다. 몽고DB와 카우치 DB를 포함한 일부 NoSQL 데이터 저장소는 제한된 형태의 맵리듀스를 지원한다. 이 매커니즘은 많은 문서를 대상으로 읽기 전용 질의를 수행할 때 사용한다. '데이터 중심 애플리케이션 설계'을 읽던 위와 같은 구절을 만났다. MongoDB를 개발하는 내내 쓰면서 아직도 내가 모르는 기능이 있다는게 신기하다. 맵리듀스는 여러 함수형 프로그래밍 언어에 있는 map과 reduce 함수를 기반으로 한다. map() 함수는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다. reduce() 함수는 배열의 각 요소에 대.. 2022. 11. 8.
[MongoDB] Robo3T Failed to load documents 해결 방법 - Studio 3T 설치 그동안 잘 Robo3T를 사용하였는데 오늘부터 위와 같은 오류들이 생기기 시작했다. 알아보니 Robo3T v1.4의 문제 중 하나였다. 해결 방법은 v1.4.2을 다운로드 받는 것인데 알고보니 Robo3T는 개발 작업을 중단했으며 지원 중지되어 다운로드 받을 수 없다. 공식문서를 찾아보니 Robo3T 대신 Studio 3T를 다운로드 받는 것은 권장하고 있다. 다운로드하는 방법은 아주 간단하다. https://robomongo.org/ Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo) Read by Dmitry Schetnikovich robomongo.org 위 링크를 클릭한 후 Download Studio 3T Free Today를 눌러주면 .. 2022. 8. 30.
[MongoDB] syncIndexes() 이용해서 변경한 index 자동 적용시키기 예를 들어, name과 category에 index를 적용시켜줬습니다. 하지만 category는 필요 없어져서 삭제시켜준 후 다시 서버를 돌린다고 하면 어떻게 될까요? 예상대로라면 name만 index 적용이 되어야 합니다. 예상과 달리 name, category 모두 index 적용이 되어있었습니다. 방법을 몰라 robo3T에 직접 들어가서 매번 Index를 삭제하고 다시 서버를 돌렸죠. 이 행위가 매우 귀찮고 mongoDB에서 알아서 Index 자동 적용시켜주면 안되나 생각했습니다. 그러던 중 syncIndexes의 존재를 알게 되었습니다 ❗️ 찾아보니 5.2.0 버전 이전에는 mongoose에서 지원을 해주지 않았다고 합니다. 하지만 5.2.0 이후부터는 synclndexes()를 프로덕션 데이터베.. 2022. 7. 28.
[MongoDB] Transaction 트랜잭션 개념부터 실습까지 (3) - NodeJS에 사용하기 1편 Transaction 트랜잭션 개념부터 실습까지 https://bcoding-lab.tistory.com/293?category=868268 [MongoDB] Transaction 트랜잭션 개념부터 실습까지 (1) - Transaction numbers are only allowed on a replica set member Transaction이란 예를 들어, 위 그림과 같이 4개의 데이터를 지운다고 과정을 하도록 하겠습니다. 순차적으로 작업을 하던 중 C에서 에러로 인해 데이터 삭제가 불가능한 상태가 되었습니다. C,D는 bcoding-lab.tistory.com 2편 Transaction 트랜잭션 개념부터 실습까지 https://bcoding-lab.tistory.com/298?category.. 2022. 7. 13.
[MongoDB] Transaction 트랜잭션 개념부터 실습까지 (2) - 로컬에서 Replica Set 구성하기 https://bcoding-lab.tistory.com/293?category=868268 [MongoDB] Transaction 트랜잭션 개념부터 실습까지 (1) - Transaction numbers are only allowed on a replica set member Transaction이란 예를 들어, 위 그림과 같이 4개의 데이터를 지운다고 과정을 하도록 하겠습니다. 순차적으로 작업을 하던 중 C에서 에러로 인해 데이터 삭제가 불가능한 상태가 되었습니다. C,D는 bcoding-lab.tistory.com 지난 1편에서 트랜잭션을 하기 위해서는 Replica Set 환경 구성이 필수라는 것을 알았다. 무려 이틀에 걸쳐 Replica Set을 구성하였는데, 정말 에러란 에러는 다 만난 것 같.. 2022. 7. 12.
[MongoDB] Error: couldn't connect to server 127.0.0.1:27017 오류해결 트랜잭션을 위해 로컬에서 리플리카셋을 구성하면서 이거저거 건들다가 어느순간 mongo가 안되기 시작했다 🤯 mongo 터미널에 mongo로 치니깐 (혹시 서버를 운영 중이었다면 터미널에서 err 나오거나 robo3t에도 접속 ㄴㄴ) Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused : 라는 오류 메세지가 나왔다. mongod 다시 터미널에 mongod를 쳐봤다. 어마어마한 글들이 나왔는데 잘 찾아보면 "msg":"Failed to unlink socket fil.. 2022. 7. 8.
[MongoDB] mongod.conf 설정 파일 찾기 - masOS의 경우 MongoDB에서 트랜잭션을 위해 리플리카셋을 설정을 시도하던 중 설정 파일을 찾을 수 없었다. vi /etc/mongod.conf 물론 위 코드로 바로 열어서 편집해줄 수 있긴 하다. (나의 경우 '아니 편집이 가능하면 있다는 건데 왜 눈에 안 보이는 거야'에서 시작해서 찾게 되었다 🌝) 우선 나의 가장 큰 잘못은 경로를 잘못 생각하고 있었던 것이다. 공식문서를 보면 맥의 경우 경로가 둘 중 하나다. 첫 번째는 가장 일반적인 경로이다. 두 번째는 homebrew로 mongodb를 깔았을 경우 설치되는 경로인 것 같다. (회사 컴퓨터라 homebrew로 깔아있는지 몰랐다..) 그리고 나서 finder에서 이동>폴도로 이동을 눌러서 /opt/homebrew/etc를 치면 한 번에 갈 수 있다. 그게 싫은 .. 2022. 7. 7.
728x90
반응형