본문 바로가기

반응형

mongoDB

(17)
[elasticsearch] mongoDB changeStream to Elasticsearch 데이터 동기화 - sync 맞추기 mongoDB 와 Elasticsearch 데이터가 연동되어 있는 경우, 데이터 생성, 수정, 삭제가 발생할 때마다 각각의 Db를 수기로 바꿔주는 것은 매우 비효율적이다! 그래서 MongoDB의 streamchange를 사용해서 변화가 생길 때 es에도 해당 변화가 업데이트되도록 만들어 주기 ! change stream을 사용하기위해 우리는 반드시 mongoDB replica set을 사용해야 한다고 함! 그 이유는 change stream이 oplog에 의해 수행되기 때문이다. mongoDB collection에 changeStream 열기 db.collection('person').watch() 또는 Person.watch() // directly using the model Person 자체가 해당..
[mongoose] _v 필드 생성 이유 및 제거하기 갑자기 mongoDB에 새로운 db를 연결해서 데이터를 넣었는데 갑자기 처음본 _v 필드가 나왔다. 모델 스키마에 존재하지 않는데 왜지 ??? 찾다가 versionKey 값을 넣어주면 되었다. 해결 : 모델 스키마 두 번째 인자값 옵션에 versionKey: false를 작성해주기 const addressSchema: Schema = new Schema( { // 지역 region: String, // 시군구 siGunGuName: String, // 읍면동 eupMyeonDongName: String, // 연결된 주소 (pk) chainedAddress: String, }, { timestamps: { createdAt: true, updatedAt: true }, read: 'secondaryPre..
[mongoDB] 필드값이 null 또는 not set인 도큐먼트 find문으로 찾기 (feat. $ne: null) mongoDB 에서 Find 쿼리문으로 데이터를 찾을 때 마다 헷갈려서 써보는 공부겸 정리 글 먼저 counter라는 collection에 아래 데이터들을 먼저 넣어 주었다. db.counter.insertOne({name: 'gugucon'}) db.counter.insertOne({name: 'melona', price: 500}) db.counter.insertOne({name: 'byulanba', price: 10000, color: 'brown'}) db.counter.insertOne({name: 'bbabbico', pirce: 1000000, color: null}) db.counter.insertOne({name: 'choco', price: null, color: null}) db.c..
[mongoDB] "errorMessage": "Cannot do exclusion on field dongAddress in inclusion projection" mongoDb find query 문을 날리다가 나온 에러 "errorMessage": "Cannot do exclusion on field dongAddress in inclusion projection" projection 부분에 포함과 제외를 함께 쓸 수 없다는 에러였다. 한 도큐먼트에 newAddress, dongAddress Field 그리고 기타 등등의 필드들이 있다면 * 포함의 경우 const result = await aCertainModel.find({}, 'newAddress dongAddress'); 위의 쿼리문으로 가져올 필드들은 newAddress, dongAddress 가 된다. * 제외의 경우 const result = await aCertainModel.find({}, '-n..
[mongoDB] find 특정 텍스트 스트링 포함된 값 찾기 / 제외하기 mongoDB Find 자세히 알아보기 1. mongoDB의 한 Field 중 특정 텍스트 값을 가진 데이터 찾기 /.* .*/ ex 1) const result = await ACerTainModel.find({ newAddress: /.*광역.*/ }); newAddress 필드에 "광역"이 들어간 모든 데이터가 나온다. 앞 뒤 string 무관 찾을 수 있는 newAddress value : 울산광역시 / 인천광역시 / 광역시 / 광역 / 김광역... 2. 특정 텍스트 값이 없는 데이터 찾기 { filed: { $not: /.*.*/ } } ex 2) const result = await ACerTainModel.find({ newAddress: { $not: /.*서울.*/ } }); newA..
[mongoimport] CSV 파일 createdAt 넣기 'createdAt', could not parse token '2022-05-13 17:05:52' to type date_oracle mongoimport 로 넣은 데이터들이 생각해보니 CraetedAt field가 없었다. 🤦🏽‍♀️ 모델 스키마에 timestamps : true 도 하고 createdAt / updatedAt까지 써주었지만 (원래는 timestamps: true로 충분!!) createdAt이 넣어지지 않아서 생각해보니 webstorm의 내 스키마와 내 터미널의 mongoimport문은 서로 연결(?)고리가 없었다 !! insert하려는 csv 파일에 날짜 형식을 넣어봐도 아래와 같은 에러가 났다. 'createdAt', could not parse token '2022-05-13 08:26:52' to type date_oracle 해결법 : 에러 메세지를 자세히 보면 type date_oracle
[mongoDB] create index $text search 걸어서 특정 단어 검색하기 mongoDB의 한 테이블 안에서 특정 단어 검색할 때 검색할 필드에 inde를 먼저 걸어주어야 한다. 검색하고자하는 필드에 index 생성 db.reviews.createIndex( { comments: "text" } ) Index 여러개 생성 시 db.reviews.createIndex( { subject: "text", comments: "text" } ) => 이렇게 인덱스를 걸어주면 mongodb find 쿼리문에서 $text 를 사용할 수 있다. db.reviews.find({$text: { $search: "내돈내산"} }); 인덱스를 걸은 필드들 중 "내돈내산" 스트링이 있는 document를 찾아준다. Reference : https://www.mongodb.com/docs/manua..
[mongoimport ] txt cvs파일 mongoDB 대량 insert하기 / type 타입 지정 공공데이터에서 서울 지역의 주소및 정보 txt 파일을 csv로 변환한 후 mongoimport를 사용하여 mongoDB에 밀어 넣기를 해보았다. 처음에는 데이터를 가공해서 넣어야지 했는데 총 60.8만건이어서 매우 막막했다. 먼저 txt -> csv 파일로 변환하기 + 엑셀 표로 만들기 포스팅은 👇 https://blckchainetc.tistory.com/398 txt 파일을 cvs 파일로 바꾸는 방법 / txt, cvs 파일 엑셀 표로 만들기 서울지역의 txt 파일을 mongoDB로 옮기기 위해 txt를 cvs 파일로 바꿨다. 1. txt파일을 Excel로 연다. 2. 다른 이름으로 저장 -> csv utf-8 을 선택한다. 3. 끝~~ 그런데 cvs 파일을 열어보면 표로 되어 있지.. blckcha..
[Mongoose] virtual field만들어서 populate 사용하기 with options 모델 스키마에 virtual 필드를 생성 const MenuCategorySchema: Schema = new Schema( { // MySql 메뉴 카테고리 IDX idx: { type: Number, required: true, unique: true }, // MySql 매장 IDX restaurantIdx: { type: Number }, // 카테고리 명 name: { type: String, required: true }, // 노출 우선순위 priority: { type: Number, required: true }, // 삭제 여부 isDeleted: { type: Boolean, required: true, default: false }, // 카테고리 설명 description: { t..
[mongoDB] Operations updating... Query and Projection Operators Query Selectors $eq ( = equal ) 같은 value $gt ( = less than or equal) ~보다 작거나 같은 value $ne ( not equal ) ~와 같지 않은 value $nin ( not in an array ) 주어진 배열 요소들 중 하나라도 일치하지 않는 경우 Logical $and 여러 경우를 모두 포함한 경우 $not ~ 가 아닌 ( 해당 조건의 field가 없는 곳까지 모두 반환 ) db.inventory.find( { price: { $not: { $g..
[MongoDB] Replica set이란? A replica set in MongoDB 몽고디비에서 A replica set이란 똑같은 데이터 set을 유지하는 mongod processes의 한 그룹이다. Replica sets은 redundancy(중복)과 high availability(높은 사용성)을 제공하고 모든 production deployments의 기본이 된다.  Redundancy & Data Availability Replication은 redundancy와 data availability를 제공한다. 다른 데이터베이스 서버들의 여러개의 데이터 카피본들로, replication은 하나의 데이터베이스 서버의 손상에 대항할 수 있다. 어떤 경우에는 Replication은 읽기 능력을 향상시켜주기도 한다. clients가 다른 서..
[MongoDB] Mongoose Query 총 정리 updating...      Query()     Query.prototype.$where()      Query.prototype.Symbol.asyncIterator()for/ await/ of loop와 사용되는 asyncIterator 를 반환한다. find() 쿼리문과만 사용된다. 명시적으로 요 매서드를 부를 필요가 없다, 자바스크립트 런타임이 불러 준다. * asyncIterator() An AsyncIterator is an Object that returns a sequence of Promises. Since AsyncIterators are AsyncIterables, you can use for await (const value of iterable) {} to easily loop..
[MongoDB] options - lean, new, upsert MongoDB options 몽고디비 crud 를 하다가 자주 마주친 { lean: true, new: true, upsert: true } 옵션들 자세히 공부해보쟈~~~ 1. lean 디폴트 값으로 MongoDB 쿼리는 Mongoose Document class를 반환한다. 일반 바닐라 자바스크립트 objects 보다 훨씬 무겁다. 몽구스 도큐먼트 클래스는 아주 많은 change tracking 의 internal 상태를 가지고 있기 때문이다. { lean: true } 옵션값을 넣어주게 되면 몽고스에게 POJO (Plain Old JavaScript Object) 를 달라고 말하게 된다. mySQL의 { raw : true } 와 비슷하다. lean() 옵션을 준 return 값의 사이즈는 = 36,..
[DB] MongoDB Index 개념과 설계 전략 인덱스, Index 란? 책의 마지막 쪽에 있는 '인덱스', '찾아보기' 와 비슷하다. 책의 '인덱스'에 적힌 페이지 번호는 해당 데이터의 주소에 비유할 수 있다. DBMS도 사람이 책의 인덱스를 보고 해당 페이지를 찾는 것처럼 데이터를 찾는다. 데이터와 저장된 위치를 키와 값의 쌍 (key-value pair)으로 관리한다. DB의 검색을 신속하게 하기 위해 데이터의 순서를 미리 정해두는 과정이다. 특정 데이터 필드를 인덱스로 지정하여 검색 결과를 빠르게 얻을 수 있다. DBMS에서 인덱스는 데이터의 저장성능을 희생해서 상대적으로 데이터의 읽기 속도를 향상시키는 존재 -> 테이블에 인덱스 하나를 더 추가할지 말지는 데이터의 저장 속도를 얼마나 더 희생할 수 있는지, 읽기(조회) 속도를 얼마나 더 빠르게..
[MongoDB] DAS, NAS, SAN, HDD, SSD, 인덱스란? 저장매체의 종류와 특성 저장매체의 종류와 특성 내장디스크 (Internal Disk) PC 본체에 장착된 디스크, 장착 가능 개수가 적고, 용량도 부족한 경우가 많음 DAS (Direct Attached Storage) 스토리지의 한 종류로써 서버와 직접 연결되는 하드웨어, 서버와 하드웨어를 1:1로 연결, "서버의 외장하드" 와 비슷 내장디스크의 용량 문제 해결을 위해 주로 사용, 독자적으로 사용할 수 없으며 본체에 연결해서 사용 반드시 하나의 본체에만 연결해야하며 동시 공유는 불가 장점 : 확장이 용이하다. (계속 사서 붙이기) 단점 : 계속 확장하다 보면 서버 효율 저하 NAS (Network Attached Storage) 네트워크가 연결된 DAS, 여러 컴퓨터에서 동시 사용 가능, TCP/IP를..
[MongoDB] Node.js express CRUD with mongoDB Node.js, express with mongoDB로 application 만들기 1. vsc 기본 세팅 - MONGODB_CRUD 폴더 > server.js 파일 생성 - 터미널 경로 MONGODB_CRUD에서 npm init npm init - 필요한 packages 다운 npm install express morgan nodemon ejs body-parser dotenv mongoose axios express : morgan : HTTP request logger middleware for node.js (It logs requests.) nodemon : 변경 사항있을 때 자동으로 server on (오직 js 파일 변경 시에만 ! html X ) ejs : 템플릿 엔진 (템플릿을 읽어 엔진..
[MongoDB] 몽고디비란? 기본 개념, 장점 단점 / CRUD MongoDB 출현 배경 알아보기 클라우드, 빅데이터 출현함으로써 이를 효율적으로 처리할 빅데이터 솔루션이 필요해짐 -> NoSQL(Not Only SQL) 의 등장 -> 대량의 데이터를 빠른 속도로 처리가능 (SQL의 부족한 점을 돕는 기능, 완벽하게 대체는 X) -> NoSQL의 종류 중 하나인 document key/value Store 의 대표 케이스가 MongoDB이다. 클라우드 - 클라우드 컴퓨팅 : 인터넷 기반 컴퓨팅 기술, 개인 단말기는 주로 입/출력만 이루어지고 정보 분석 및 처리, 저장, 관리, 유통 등은 클라우드 공간에서 이루어지는 컴퓨팅 시스템 - 인터넷 상의 유틸리티 데이터 서버에 프로그램을 두고 그때 그때 컴퓨터, 휴대폰 등에 불러와서 사용하는 웹 기반 소프트웨어 서비스 클라우드..

반응형