[게임 서버] 8.6 MongoDB에 데이터 액세스

게시:     수정

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자

📦 8. NoSQL 기초

👉🏻 6. MongoDB에 데이터 액세스

🎯 목표

  • 컬렉션에 도큐먼트를 추가한다.
  • CRUD (Create, Read, Update, Delete) 하는 방법을 알아본다.

➕ 1. 생성 (Create)

// db.<COLLNAME>.insert(<OBJECT>)
db.coll1.insert({"a":1})
  • <COLLNAME>: 컬렉션 이름
  • <OBJECT>: 도큐먼트 (JSON 형식)
  • 컬렉션이 없으면 컬렉션이 생성되고, 도큐먼트가 컬렉션에 추가된다.

🔍 2. 읽기 (Read)

find()

// db.<COLLNAME>.find(<COND>)
db.coll1.find()
db.coll1.find({"a":1})   // 특정 조건 출력
db.coll1.findOne()       //  번째로 나오는 하나만 출력
  • <COND>에는 찾기 조건문을 넣는다. 아무것도 넣지 않으면 모든 것을 찾는다.
  • SQL 구문으로 select * from <COLLNAME> where <COND>와 비슷하다.
  • 검색 결과는 Tree / Table / JSON View를 선택하여 원하는 형태로 볼 수 있다.
  • _id (오브젝트 ID): 도큐먼트의 고유 식별자로 키 역할을 하며, 모든 도큐먼트에 자동으로 추가된다.

JSON View:

{
    "_id" : ObjectId("69b15df6e3b33261a244152e"),
    "a" : NumberInt(1)
}

Table View:

_id a
69b15df6e3b33261a244152e 1

Tree View:

Key Value Type
(1) {_id : 69b15df6e3b33261a244152e} { 2 fields } Document
_id 69b15df6e3b33261a244152e ObjectId
a 1 int32

연산자: $gt

db.coll1.insert({"a":2})
db.coll1.insert({"a":3})
db.coll1.find({"a":{$gt:1}})
  • $gt: greater 연산으로, {$gt:1}이 하나로 묶여 1보다 큰 도큐먼트들을 찾는다.
  • SQL 구문으로 select * from coll1 where a>1과 비슷하다.

결과:

Key Value Type
(1) {_id : 69b161fbe3b33261a244152f} { 2 fields } Document
_id 69b161fbe3b33261a244152f ObjectId
a 2 int32
(2) {_id : 69b161fbe3b33261a2441530} { 2 fields } Document
_id 69b161fbe3b33261a2441530 ObjectId
a 3 int32

연산자: $or

db.coll1.find({$or: [{"a":1},{"a":2}] })
  • $or: or 연산자로, []으로 묶어 하나의 배열 객체로 만든다.
  • SQL 구문으로 select * from coll1 where a=1 or a=2와 비슷하다.

결과:

Key Value Type
(1) {_id : 69b15df6e3b33261a244152e} { 2 fields } Document
_id 69b15df6e3b33261a244152e ObjectId
a 1 int32
(2) {_id : 69b161fbe3b33261a244152f} { 2 fields } Document
_id 69b161fbe3b33261a244152f ObjectId
a 2 int32

원하는 일부만 출력

db.coll1.find({}, {"_id":0, "a":1})
  • {}, {...} 에서 첫 번째 중괄호는 검색 조건을 뜻한다.
  • "_id""a" 뒤에 붙은 0과 1은 bool 값 역할을 하여 출력 여부를 결정한다.
  • _id는 출력하지 않고, a만 출력하도록 한다.

결과:

Key Value Type
(1) { 1 field } Document
a 1 int32
(2) { 1 field } Document
a 2 int32
(3) { 1 field } Document
a 3 int32

✏️ 3. 업데이트 (Update)

db.coll1.update({"a":1}, {$set:{"a":5}})
db.coll1.find()
  • {}, {...} 에서 첫 번째 중괄호는 검색 조건이다.
  • SQL 구문으로 update coll1 set a=5 where a=1과 비슷하다.
  • a=1인 도큐먼트를 a=5로 바꾼다.

결과:

Key Value Type
(1) {_id : 69b15df6e3b33261a244152e} { 2 fields } Document
_id 69b15df6e3b33261a244152e ObjectId
a 5 int32
(2) {_id : 69b161fbe3b33261a244152f} { 2 fields } Document
_id 69b161fbe3b33261a244152f ObjectId
a 2 int32
(3) {_id : 69b161fbe3b33261a2441530} { 2 fields } Document
_id 69b161fbe3b33261a2441530 ObjectId
a 3 int32

🗑️ 4. 지우기 (Delete)

db.coll1.remove({"a":3})
  • 첫 번째 중괄호는 검색 조건이다.
  • a=3인 도큐먼트를 삭제한다.
  • SQL 구문으로 delete from coll1 where a=3과 비슷하다.

결과:

Key Value Type
(1) {_id : 69b15df6e3b33261a244152e} { 2 fields } Document
_id 69b15df6e3b33261a244152e ObjectId
a 5 int32
(2) {_id : 69b161fbe3b33261a244152f} { 2 fields } Document
_id 69b161fbe3b33261a244152f ObjectId
a 2 int32

GameServer 카테고리 내 다른 글 보러가기

댓글남기기