[게임 서버] 8.6 MongoDB에 데이터 액세스
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 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 |
댓글남기기