8. 몽고디비
28666 단어 node.js 교과서node.js 교과서
NoSQL vs SQL
SQL | NoSQL |
---|---|
규칙에 맞는 데이터 | 자유로운 데이터 |
join 지원 | join 미지원 |
안정성, 일관성 | 확장성, 가용성 |
테이블, 로우, 컬럼 | 컬렉션, 도큐먼트, 필드 |
기본 명령
1) DB 관련
- DB 보기
> show dbs
- 현재 DB 확인
> db
- 현재 DB 정보
> db.status()
- DB 선택(없는경우 생성됨)
> use [데이터베이스명]
- DB 삭제
> db.dropDatabase()
2) Collection 관련
- 컬렉션 생성
> db.createCollection('컬렉션명')
- 컬렉션 제거
> db.[컬렉션명].drop()
- 컬렉션 목록 조회
> show collections
3) 기타 연산자
-
비교 연산자
operator 설명 $eq (equals) 주어진 값과 일치하는 필드 $ne (not equals) 주어진 값과 일치하지 않는 값을 가진 필드 $gt (greater than) 주어진 값보다 큰 필드 $gte (greather than or equals) 주어진 값보다 크거나 같은 필드 $lt (less than) 주어진 값보다 작은 필드 $lte (less than or equals) 주어진 값보다 작거나 같은 필드
-
논리 연산자
operator 설명 $or 여러개 조건 중 적어도 하나를 만족하는 document $and 여러개 조건을 모두 만족하는 document $nor 여러개 조건을 모두 만족하지 않는 document $not 조건을 만족하지 않는 필드 $exists 특정 필드를 가지고 있을 경우 반환
-
집합 연산자
operator 설명 $ne (not equal) 주어진 값과 일치하지 않는 값 $in 주어진 배열 안에 속하는 값 $nin 주어빈 배열 안에 속하지 않는 값
-
제한자
operator 설명 $inc 값 증가 / 감소 $mul 곱하기 $divide 나누기 $rename 필드 이름 변경 $set 필드 값 변경, 필드 없을경엔 추가 $unset 필드 제거
Create
insertOne(document, writeConcern) : 1개의 도큐먼트 생성
intertMany(document, writeConcern, ordered) : 여러개의 도큐먼트 생성
parameter 설명 document 컬렉션에 삽입할 문서 writeConcern 요청에 대한 response를 어느 시점에 주는지에 대한 동작 방식 ordered 정렬여부
- insertOne()
> db.[컬렉션명].insertOne({name:"park", age:26})
- insertMany()
> db.[컬렉션명].insertMany([
{name:"이새롬", age: 26},
{name:"송하영", age: 26},
{name:"장규리", age: 26},
{name:"박지원", age: 25},
{name:"노지선", age: 25},
{name:"이서연", age: 23},
{name:"이채영", age: 23},
{name:"이나경", age: 23},
{name:"백지헌", age: 20}
])
Read
findOne(query, projection) : 한개의 도큐먼트 조회
find(query, projection) : 여러개의 도큐먼트 조회
parameter 설명 query document를 조회할 기준 projection 보여질 필드 지정
- findOne()
> db.[컬렉션명].findOne() //1개의 도큐먼트만 조회
> db.[컬렉션명].findOne({status:"A"}) //status가 A인 1개의 도큐먼트 조회
> db.[컬렉션명].findOne({status:"A"}, {age:1, _id:0}); // status가 A인 도큐먼트 1개의 age만 조회
- find()
> db.[컬렉션명].find() //모든 도큐먼트 조회
> db.[컬렉션명].find({},{_id:0, name:1, age:0}) //모든 도큐먼트의 name만 조회
> db.[컬렉션명].find({status:"A"}) //status가 A인 모든 도큐먼트 조회
> db.[컬렉션명].find({status:"A", age:50}) //status가 A이고 age가 50인 모든 도큐먼트 조회
> db.[컬렉션명].find({$or:[{status:"A"}, {age:50}]}) // status가 A이거나 age가 50인 도큐먼트 조회
> db.[컬렉션명].find({age:{$gt:25}}) //age가 25보다 큰 도큐먼트 조회
> db.[컬렉션명].find({age:{$gt:25, $lte:50}}) //age가 25보다 크고 50보다 작거나 같은 도큐먼트 조회
> db.[컬렉션명].find({$or:[{age:5}, {age:15}]}) //age가 5거나 15인 도큐먼트 조회
> db.[컬렉션명].find({user_id:/bc/}) //user_id가 %bc%인 도큐먼트 조회(user_id에 bc가 들어가는 도큐먼트)
> db.[컬렉션명].find({user_id:/^bc/}) //user_id가 bc%인 도큐먼트 조회(user_id가 bc로 시작하는 도큐먼트)
- 카운트
> db.[컬렉션명].count() //전체 카운트
> db.[컬렉션명].count({user_id:{$exists:false}})//user_id가 없는 컬럼 개수
> db.[컬렉션명].count({age:{$gt:30}})
== db.[컬렉션명].find({age:{$gt:30}}).count()
- distinct
> db.[컬렉션명].distinct("도큐먼트명")
- 리미트
> db.[컬렉션명].find().limit(2)
- 정렬
> db.[컬렉션명].find({status:"A"}).sort({user_id:1}) //오름차순 정렬
> db.[컬렉션명].find({status:"A"}).sort({user_id:-1}) //내림차순 정렬
Update
updateOne(query, update, options) : 한개의 도큐먼트 업데이트
updateMany(filter, update, options) : 여러개 도큐먼트 업데이트
parameter description query 업데이트할 도큐먼트 update 업데이트할 내용 option 옵션 filter 업데이트할 도큐먼트, { }만 사용시 전체 도큐먼트
- updateOne()
> db.[컬렉션명].updateOne({name:'이나경'}, {$set:{age:24}})
- updateMany()
> db.[컬렉션명].updateMany({status:"A"}, {$inc:{age:3}})
> db.[컬렉션명].updateMany({age:{$gt:40}}, {$set:{status:"B"}})//age가 40보다 큰 도큐먼트의 status를 b로 변경
Delete
deleteOne(query) : 한개의 도큐먼트 삭제
deleteMany(query) : 여러개 도큐먼트 삭제
parameter description query 삭제할 도큐먼트
- deleteOne()
> db.[컬렉션명].deleteOne({status:"A"})
- deleteMany()
> db.[컬렉션명].deleteMany({})
> db.[컬렉션명].deleteMany({age:{$lt:30}}) //age가 30보다 작은 도큐먼트 삭제
Author And Source
이 문제에 관하여(8. 몽고디비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeonmin97/8.-몽고디비저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)