잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

MongoDB 기초 본문

Study/MongoDB

MongoDB 기초

현록 2023. 7. 13. 20:37

이전 포스트에서 mongosh로 MongoDB Shell로 접속한 후의 상황에서 이어진다.

[Study/MongoDB] - Docker Compose로 MongoDB 환경 세팅

blackdeer@Mac mongodb % docker exec -it   mongodb   /bin/bash  

root@mongodb:/# mongo  

bash: mongo: command not found

root@mongodb:/# mongosh   -u root   -p example  

Current Mongosh Log ID: 64afa30efd5fb964295551f8

Connecting to:          mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.10.1

Using MongoDB:          6.0.7

Using Mongosh:          1.10.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------

   The server generated these startup warnings when booting

   2023-07-13T07:01:43.903+00:00: vm.max_map_count is too low

------

test> show databases  

admin   100.00 KiB

config   60.00 KiB

local    72.00 KiB

 

 


RDB의 용어와 비교하자면 다음과 같다

RDB

MongoDB

Database

Database

Table

Collection

Column

Field

Row

Document

RDB는 Table에 Column설정을 하고 데이터들을 Row 형태로 저장할텐데,

Document형 NoSQL인 MongoDB는 Collection에 json형식의 Document를 저장한다.

 

json문서가 데이터이며 내부 키(Field)들이 RDB의 Column닮았다고 할 수 있는데,

RDB처럼 Table 생성시 정한 Column들만 사용할 수 있는 것이 아니라

문서를 어떻게 작성하느냐에 따라 언제든 스키마 수정 없이(스키마를 정의하지도 않았으니) 가변적으로 활용할 수 있다.

 

그래서 하위 항목으로 갈 수록(Column, Row) 용어를 1:1로 완벽하게 매칭시킬 순 없다.

유연성은 더 좋지만 반대로 속도나 무결성 등에 대해서는 잃는 것도 있기 때문에 어느 쪽이 반드시 좋다고 할 순 없다.

(그리고 이 수치는 RDB에서 얼마나 JOIN을 하는지, 데이터 디자인이 어떤지에 따라서도 달리지기 때문에

반드시 뒤쳐지고 반드시 좋아진다고 단정지을 수 없는 부분이다.

이러한 이론에 대한 부분은 이 포스트에서 다루지 않는다.)

 


 

use 데이터베이스명으로 데이터베이스를 생성한다.

이건 정확하게는 현재 사용할 db를 선택하는 것이다.

test> show databases  

admin   100.00 KiB

config   72.00 KiB

local    72.00 KiB

 

test> use test01  

switched to db test01

 

test01> show dbs  

admin   100.00 KiB

config   72.00 KiB

local    72.00 KiB

그런데 쉘 앞만 test에서 우리가 생성한 데이터베이스명(test01)으로 바뀌었을 뿐 데이터베이스는 아직 만들어지지 않은 것 같다.

 

MongoDB에서는 실제로 document나 collection을 생성해야만 DB가 생성된다.

원문: MongoDB only creates the database when you first store data in that database. This data could be a collection or a document.

(https://www.mongodb.com/basics/create-database)

 

Mongo Express의 GUI를 통해서 database를 생성해도

내부에는 delete_me 라는 이름의 빈 collection이 포함된 채로 database가 생성되게 된다.

 


 

collection을 생성해보자

test01> db.createCollection('book' 

{ ok: 1 }

 

test01> show databases  

admin   100.00 KiB

config  108.00 KiB

local    72.00 KiB

test01    8.00 KiB

이제는 database가 생성된 것을 볼 수 있다.

 


 

이제 collection 안에 문서를 저장해보자

test01> db.book.find()  

 

test01> db.book.insertOne({"author": "Kim""title": "Easy Cooking"})  

{

  acknowledged: true,

  insertedId: ObjectId("64afe579952fbf5c1d6a917d")

}

 

test01> db.book.insertMany([{"author": "Park""title": "Chemical Science""publisher": "Han-sam"}, {author: "Lee", title: "Cat Holic"}])  

{

  acknowledged: true,

  insertedIds: {

    '0': ObjectId("64afe58e952fbf5c1d6a917e"),

    '1': ObjectId("64afe58e952fbf5c1d6a917f")

  }

}

 

test01> db.book.find()  

[

  {

    _id: ObjectId("64afe579952fbf5c1d6a917d"),

    author: 'Kim',

    title: 'Easy Cooking'

  },

  {

    _id: ObjectId("64afe58e952fbf5c1d6a917e"),

    author: 'Park',

    title: 'Chemical Science',

    publisher: 'Han-sam'

  },

  {

    _id: ObjectId("64afe58e952fbf5c1d6a917f"),

    author: 'Lee',

    title: 'Cat Holic'

  }

]

json형식으로 작성한 문구를 하나씩 혹은 여러개를 저장할 수 있고,

collection을 만들 때 RDB처럼 column을 정해둔 것이 아니기에

문서마다 다른 키를 가져도 상관없이 저장할 수 있다.

 


 

기존 문서의 수정과 확인(특정 조건 문서 조회)

test01> db.book.updateOne({_id: ObjectId("64afe58e952fbf5c1d6a917f")}, {$set: {author"Kim"}})  

{

  acknowledged: true,

  insertedId: null,

  matchedCount: 1,

  modifiedCount: 1,

  upsertedCount: 0

}

 

test01> db.book.find({author: 'Kim'})  

[

  {

    _id: ObjectId("64afe579952fbf5c1d6a917d"),

    author: 'Kim',

    title: 'Easy Cooking'

  },

  {

    _id: ObjectId("64afe58e952fbf5c1d6a917f"),

    author: 'Kim',

    title: 'Cat Holic'

  }

]

 


 

문서의 삭제

test01> db.book.deleteOne({_id: ObjectId("64afe579952fbf5c1d6a917d")})  

{ acknowledged: true, deletedCount: 1 }

 

test01> db.book.find({author"Kim"})  

[

  {

    _id: ObjectId("64afe58e952fbf5c1d6a917f"),

    author: 'Kim',

    title: 'Cat Holic'

  }

]

 


 

collection의 삭제

test01> db.book.drop()  

true

 

test01> show dbs  

admin   100.00 KiB

config  108.00 KiB

local    72.00 KiB

database에 남은 collection이 하나도 없기 때문에 database도 지워진다.

여전히 test01 db를 사용하는 상태이기 때문에 collection을 추가하면 바로 database와 함께 collection이 생성될 것.

 


 

database의 삭제

test01> db.dropDatabase()  

{ ok: 1, dropped: 'test01' }

 

test01> db.dropDatabase()  

{ ok: 1, dropped: 'test01' }

database 내부의 collection이나 document들 모두와 함께 지울 수 있다.

 


 

MongoDB의 유저 생성은 admin database에 기록된다

test01> use admin  

switched to db admin

 

admin> db.createUser({user"user01"pwd"123456"roles: [{role"readWrite"db"test01"}]})  

{ ok: 1 }

위는 Mongo Express에서 확인한 화면(admin>system.users)

 

https://www.mongodb.com/docs/v6.0/tutorial/create-users/

https://www.mongodb.com/docs/v6.0/tutorial/manage-users-and-roles/

메뉴얼에서 다른 예제나 수정 및 커스텀 권한 등도 찾아볼 수 있다.

 

 


공식 문서 중 기초 부분

https://www.mongodb.com/basics

 

Beginners Guide: MongoDB Basics

Learn the basics of MongoDB and some of the key concepts.

www.mongodb.com

 

 

'Study > MongoDB' 카테고리의 다른 글

Docker Compose로 MongoDB 환경 세팅  (0) 2023.07.13
Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→