
RDBMS는 스키마를 정의하고 해당 규격에 맞는 데이터를 2차원 테이블 형태로 저장한다. 이는 복잡하면서 저장하는 데이터가 많아지면 용량의 한계에 다다를 수 있다는 단점이 있다. 이를 해결하기 위해 비 관계형 데이터베이스 (Non-Relational DBMS, NoSQL)가 등장하였다.
NoSQL은 SQL을 사용하지 않고 복잡하지 않은 데이터를 저장하여,
단순 검색 및 추가 검색 작업을 위해 매우 최적화된 저장 공간인 것이 큰 특징이다. 또한 키-값을 사용하여 데이터를 저장하는 특징이 있다.
RDBMS는 SQL이라는 정해진 문법을 통해 저장하므로 한 가지의 언어로 다양한 DBMS를 사용할 수 있으나, NoSQL은 다양한 DBMS 각각의 구조와 사용 문법을 익혀야 한다는 단점이 있다.
JSON 형태인 Document를 저장하며, 스키마를 따로 정의하지 않아 각 컬렉션에 대한 정의가 필요하지 않다. JSON 형식으로 쿼리를 작성하며, _id 필드가 Primary Key 역할을 한다.
| Name | Description |
|---|---|
| $eq | 지정된 값과 같은 값을 찾는다. (equal) |
| $in | 배열 안의 값들과 일치하는 값을 찾는다. (in) |
| $ne | 지정된 값과 같지 않은 값을 찾는다. (not equal) |
| $nin | 배열 안의 값들과 일치하지 않는 값을 찾는다. (not in) |
| Name | Description |
|---|---|
| $and | 논리적 AND, 각각의 쿼리를 모두 만족하는 문서 반환 |
| $not | 쿼리 식의 효과를 반전, 식과 일치하지 않는 문서 반환 |
| $nor | 논리적 NOR, 각각의 쿼리를 모두 만족하지 않는 문서가 반환 |
| $or | 논리적 OR, 각각의 쿼리 중 하나 이상 만족하는 문서 반환 |
| Name | Description |
|---|---|
| $exists | 지정된 필드가 있는 문서를 찾는다. |
| $type | 지정된 필드가 지정된 유형인 문서를 선택한다. |
| Name | Description |
|---|---|
| $expr | 쿼리 언어 내에서 집계 식을 사용할 수 있다. |
| $regex | 지정된 정규식과 일치하는 문서를 선택한다. |
| $text | 지정된 텍스트를 검색한다. |
SELECT
SELECT user_idx FROM account WHERE user_id="admin";
db.account.find(
{ user_id: "admin" },
{ user_idx:1, _id:0 }
)
INSERT
INSERT INTO account(user_id,user_pw,) VALUES ("guest", "guest");
db.account.insertOne(
{ user_id: "guest",user_pw: "guest" }
)
DELETE
DELETE FROM account WHERE user_id="guest";
db.account.remove(
{user_id: "guest"}
)
UPDATE
UPDATE account SET user_id="guest2" WHERE user_idx=2;
db.account.updateOne(
{ user_idx: 2 },
{ $set: { user_id: "guest2" } }
)