1. MongoDB?
https://samdasoo2l.tistory.com/11
0. 데이터베이스 개요
0. 더는 안된다. 파일시스템.데이터베이스의 등장 이전,데이터들을 저장하기 위해서 파일시스템을 사용했었다. 하지만 파일시스템은 여러 문제를 야기했다.통합되지 않으니까 따로따로 관리해
samdasoo2l.tistory.com
NoSQL의 대표주자이다.
빅데이터, 메시징, 세션관리 등 비정형 데이터의 저장소로 적합하다.
2. 설치
몽고디비 설치 (컴파스 함께 설치 (워크벤치와 유사)) 후,
몽고디비 연결 후,
몽고디비 셸 설치 (mongosh) 후,
어드민 설정 (admin 권한설정) 하면 끝.
3. 생성과 삭제
관계형 데이터베이스에서는 데이터를 테이블에 저장하지만,
비관계형 데이터베이스에서는 데이터를 컬렉션에 저장한다.
// DB
// DB 생성 (이미 해당 DB 존재하면 실행)
use ⭐
// DB 목록 출력
show dbs
// 현재 실행 DB 출력
db
// 현재 실행 DB 상세정보 출력
db.stats()
// 현재 실행 DB 삭제
db.dropDatabase()
// 컬렉션
// 컬렉션 생성 (사실 다큐먼트 넣는 순간 컬렉션 자동 생성된다.)
db.createCollection("⭐")
// 컬렉션 조회
show collections
// 컬렉션 삭제
db.⭐.drop()
4. 사용하기 (CRUD)
// Create
db.⭐.insert({"name":"samdasoo2l"})
// 여러개 한번에 넣을 때는 배열로 전달한다.
db.⭐.insert([
{"name":"samdasoo2l"},
{"name":"samdasoo3l"}
])
// Read
// 조회할때 보이는 id필드는,
// (ObjectId뭐시기 뜨는거)
// 몽고디비에서 자동으로 넣어주는 고유값
// 전체 조회
db.⭐.find()
// 전체 깔끔하게 조회
db.⭐.find().pretty()
// name이 samdasoo인 다큐먼트를 조회
db.⭐.find({"name" : "samdasoo"})
// name이 samdasoo인 다큐먼트 중에서 "첫 번째 것 만" 조회
db.⭐.findOne({"name" : "samdasoo"})
// 이외에도 다양한 논리연산자, 정규식, 조건, 정렬 등 사용가능
// 두번째 인자는 옵션으로, 보여질 필드를 결정 (true만 보여짐, id는 true가 초기값)
db.⭐.find({}, {"_id" : false, "name" : true})
// Update
// 기본적으로 하나의 쿼리만 수정
// $set 필수 (그래야 해당 필드만! 바뀜, 아니면 다 날아가고 바꾸려는 것만 띡하고 들어감)
// name필드의 값이 samdasoo2l인 다큐먼트의, age필드의 값을 25로 update
// updateOne은 수정대상 다큐먼트 중에서 "첫 번째만" 수정
db.⭐.updateOne({"name" : "samdasoo2l"}, {$set : {age : 25}})
// Delete
// 전체 싹 삭제
db.⭐.remove()
// 해당 다큐먼트 싹다 삭제
db.⭐.remove({"name" : "samdasoo2l"})
// 해당 다큐먼트 첫 번째 것만 삭제
db.⭐.deleteOne({name : "samdasoo2l"})
// 해당 다큐먼트 싹다 삭제
db.⭐.deleteMany({name : "samdasoo2l"})
// remove를 deleteOne과 deleteMany으로 쪼갠 것이다.
// 의도치 않게 여러개가 삭제될 수 있기 때문
5. 몽구스 ODM
몽고DB 작업을 쉽게 할 수 있도록 도와주는 라이브러리이다.
(SQL 작업을 도와주는 시퀄라이즈와 유사한 역할을 한다.)
ODM : Object Document Mapping, 객체와 다큐먼트를 매핑 (1:1 짝지음)
몽고DB에 없어 불편한 기능들을 몽구스가 보완하면서 사용에 의미가 생겼다.
(테이블과 유사한 기능, Join기능(ref) 추가)
npm i mongoose 를 통해 설치한다.
(mongodb가 내장되어 있어서 따로 mongodb를 설치할 필요가 없다.)
몽구스를 통해서 꼭 해줘야 하는 작업이 스키마 작업이다.
스키마 작업을 보면서 타입스크립트가 떠올랐다.
개발에 있어서 무언가 강제적으로 제한하는 것이 불편하게 느껴지는 애송이 시절이 있었는데,
이제는 언제 생길지 모르는 오타로 인한 불안을 없애주는 따뜻한 것으로 느껴진다.
(자동 완성이 안뜨면 "아 또 오타나는 거 아니야?"하며 나에 대한 불신과 함께 화가나는 지경...)
스키마는 MySQL 테이블 처럼 정해진 데이터만 들어갈 수 있게 강제해준다.
(type : 자료형, require : 필수여부, default : 기본값, unique : 고유여부)
'DB' 카테고리의 다른 글
1. MySQL (1) | 2024.11.18 |
---|---|
0. 데이터베이스 개요 (1) | 2024.11.16 |