8. 몽고디비

NoSQL vs SQL

SQLNoSQL
규칙에 맞는 데이터자유로운 데이터
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설명
querydocument를 조회할 기준
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) : 여러개 도큐먼트 업데이트

parameterdescription
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) : 여러개 도큐먼트 삭제

parameterdescription
query삭제할 도큐먼트
  • deleteOne()
> db.[컬렉션명].deleteOne({status:"A"})
  • deleteMany()
> db.[컬렉션명].deleteMany({})
> db.[컬렉션명].deleteMany({age:{$lt:30}}) //age가 30보다 작은 도큐먼트 삭제

좋은 웹페이지 즐겨찾기