비전공자 코딩 배우기_14주차 NoSQL

Jinny·2021년 8월 17일
0

TIL

목록 보기
11/28
post-thumbnail

NoSQL - MongoDB

MongoDB는 NoSQL 도큐먼트 데이터베이스이다.
도큐먼트 데이터베이스는 데이터를 테이블이 아니라 문서처럼 저장하는 데이터베이스이다.

JSON 유사 형식으로 데이터를 문서화 하고, 각 도큐먼트는 데이터를 필드-값의 형태로 가지고 있으며 컬렉션이라고 하는 그룹으로 묶어서 관리하고 있다.

{
	<field> : <value>,
	<field> : <value>,
	"name" : "Jinny",
	"title" : "Practice"
	"age" : 30
}

title 이란 필드의 값은 Practice 이다. 이러한 도큐먼트의 모음을 컬렉션이라고 한다.

shell 을 이용하여 도큐먼트를 조회하거나 업데이트 할 때, 도큐먼트는 JSON형식으로 출력된다.

  • {} 중괄호로 도큐먼트가 시작하고 끝나야 한다.
  • 필드와 값이 콜론(:)으로 분리되어야 하며, 필드와 값을 포함하는 쌍은 쉼표(,)로 구분된다.
  • 문자열인 필드도 쌍따옴표("")로 감싸야 한다.

JSON(JavaScript Object Notation)

장점 : 텍스트 형식이라 읽기 쉬움

단점 : 파싱이 느리고 메모리 사용이 비효율적이다. 사용할 수 있는 데이터 타입에 제약이 있다.

BSON(Binary JSON)

컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현이다.

장점 : 메모리 사용이 효율적이며 빠르고, 가볍고, 유연하다. 더 많은 데이터 타입을 사용할 수 있다.


데이터 가져오기 / 내보내기

JSON

  • mongoimport

    mongoimport --uri "<Atlas Cluster URI>"
                 --drop=<filename>.json
  • mongoexport

    mongoexport --uri "<Atlas Cluster URI>"
    	     --collection=<collection name>
    	     --out=<filename>.json

BSON

  • mongorestore

    mongorestore --uri "<Atlas Cluster URI>"
    	      --drop=dump
  • mongodump

    mongodump --uri "<Atlas Cluster URI>"
    // "mongodb+srv://<username>:<password>@<cluster>.mongodb.net/database_name"

🔎 MongoDB CRUD


🖍 db.collection.insert()

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

Insert 명령어를 사용하면, 주어진 도큐먼트 배열의 인덱스 순서로 작업이 실행된다.

ordered 를 추가하면, 순서에 상관 없이 고유한 _id를 가진 도큐먼트는 모두 컬렉션에 삽입된다.

만약 사용자가 존재하지 않는 컬렉션에 도큐먼트를 넣는 경우, 그와 동시에 컬렉션이 만들어지게 된다.


🖍 db.collection.find()

db.collection.find(<쿼리문>)

find 명령어로 찾은 결과물이 20개 결과물만 출력된다.

다음 20개의 도큐먼트를 조회하기 위해서는 iterate의 줄임말인 it 명령어를 사용한다.

count() 명령어를 find() 뒤에 추가하면 해당 컬렉션 안 모든 데이터의 수가 출력된다.

find()대신 findOne() 명령어를 사용하고 조건을 주면 데이터 1개만 가져올 수 있다.


🖍 updateOne, updateMany

updateOne

주어진 기준에 맞는 다수의 도큐먼트 중 첫 번째 도큐먼트 하나만 업데이트

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

updateMany

쿼리문과 일치하는 모든 도큐먼트를 업데이트

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

연산자

  • $inc
  • $set
  • $push

updateMany, $inc

db.collection.updateMany({"업데이트 할 도큐먼트 결정하는 조건"}, {"$inc" : {"field":10}})
// 연산자 $inc 사용
// 특정한 필드의 값을 주어진 만큼 증가

$inc 연산자는 업데이트 하려는 필드와 증가하는 값을 작성하여 다양한 필드의 값을 동시에 업데이트 할 수 있다. (객체 형태)

updateOne, $set

db.collection.updateOne({"업데이트할 도큐먼트 결정하는 조건"}, {"$set" : {"field" : 333}})
// 연산자 $set 사용
// 바꾸고 싶은 값을 해당 필드에 작성하여 변경

$push

db.collection.updateOne({"업데이트할 도큐먼트를 결정하는 조건"}, {"$push" : {"field"} : {"추가할 서브 도큐먼트(키:값 형태)"}})
// 연산자 $push 사용
// 추가하고 싶은 도큐먼트 해당 필드에 값인 배열에 추

🖍 deleteOne, deleteMany

deleteOne

주어진 기준에 맞는 다수의 도큐먼트 중 첫 번째 도큐먼트 하나를 삭제

db.collection.deleteOne(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>,
      hint: <document|string>        // Available starting in MongoDB 4.4
   }
)

deleteMany

쿼리문과 일치하는 모든 도큐먼트를 삭제

db.collection.deleteMany(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)

Drop

컬렉션 삭제하는 명령어

db.collection.drop()

profile
코린이

0개의 댓글