문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

SQL - MongoDB 매핑 차트

이 페이지의 내용

  • 용어 및 개념
  • 실행 파일
  • 예제
  • 추가 읽기

다음 차트 외에도 MongoDB에 관한 일반적인 질문을 살펴보려면 자주 묻는 질문 섹션을 확인하세요.

다음 표에는 다양한 SQL 용어 및 개념과 해당 MongoDB 용어 및 개념이 제시되어 있습니다.

SQL 용어/개념
MongoDB 용어/개념
데이터베이스
테이블
문서 또는 BSON 문서
index
테이블 결합

기본 키

고유한 열 또는 열 조합을 프라이머리 키로 지정합니다.

기본 키

MongoDB에서 프라이머리 키는 자동으로 _id 필드로 설정됩니다.

애그리게이션(예: 그룹화 기준)

Aggregation pipeline

SQL-애그리게이션 매핑 차트를 참조하세요.

NEW_TABLE로 선택
테이블로 병합

$merge (MongoDB 4.2부터 사용 가능)

SQL-애그리게이션 매핑 차트를 참조하세요.

모두 통합
트랜잭션

트랜잭션

대부분의 시나리오에서 비정규화된 데이터 모델(내장된 문서 및 배열)은 다중 문서 트랜잭션 대신 계속 데이터와 사용 사례에 최적인 상태를 유지합니다. 즉, 많은 시나리오에서 데이터를 적절하게 모델링하면 다중 문서 트랜잭션의 필요성을 최소화할 수 있습니다.

다음 표에는 일부 데이터베이스 실행 파일과 해당 MongoDB 실행 파일이 제시되어 있습니다. 이 표가 모든 경우를 포함하는 것은 아닙니다.

MongoDB
MySQL
Oracle
Informix
DB2
데이터베이스 서버
mysqld
oracle
IDS
DB2 Server
데이터베이스 클라이언트
mongosh
mysql
sqlplus
DB-Access
DB2 Client

다음 표에는 다양한 SQL 문과 해당 MongoDB 문이 제시되어 있습니다. 표의 예제에서는 다음 조건을 가정합니다.

  • SQL 예제에서는 people이라는 테이블이 있다고 가정합니다.

  • MongoDB 예제에서는 다음 프로토타입의 문서를 포함하는 people이라는 컬렉션이 있다고 가정합니다.

    {
    _id: ObjectId("509a8fb2f3f4948bd2f983a0"),
    user_id: "abc123",
    age: 55,
    status: 'A'
    }

다음 표에는 테이블 수준 조치 및 해당 MongoDB 문과 관련된 다양한 SQL 문이 제시되어 있습니다.

SQL 스키마 문
MongoDB 스키마 문
CREATE TABLE people (
id MEDIUMINT NOT NULL
AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
PRIMARY KEY (id)
)

최초 insertOne() 또는 insertMany() 작업 시 암시적으로 생성됩니다. _id 필드를 지정하지 않으면 프라이머리 키 _id가 자동으로 추가됩니다.

db.people.insertOne( {
user_id: "abc123",
age: 55,
status: "A"
} )

그러나 컬렉션을 명시적으로 만들 수도 있습니다.

db.createCollection("people")
ALTER TABLE people
ADD join_date DATETIME

컬렉션은 문서의 구조를 설명하거나 실행하지 않습니다. 즉, 컬렉션 수준에서의 구조적 변경이 없습니다.

그러나 문서 수준에서 updateMany() 작업은 $set 연산자를 사용하여 기존 문서에 필드를 추가할 수 있습니다.

db.people.updateMany(
{ },
{ $set: { join_date: new Date() } }
)
ALTER TABLE people
DROP COLUMN join_date

컬렉션은 문서의 구조를 설명하거나 실행하지 않습니다. 즉, 컬렉션 수준에서의 구조적 변경이 없습니다.

그러나 문서 수준에서 updateMany() 작업은 $unset 연산자를 사용하여 문서에서 필드를 제거할 수 있습니다.

db.people.updateMany(
{ },
{ $unset: { "join_date": "" } }
)
CREATE INDEX idx_user_id_asc
ON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX
idx_user_id_asc_age_desc
ON people(user_id, age DESC)
db.people.createIndex( { user_id: 1, age: -1 } )
DROP TABLE people
db.people.drop()

사용되는 메서드 및 연산자에 관한 자세한 내용은 다음을 참조하세요.

다음도 참조하세요.

다음 표에서는 테이블에 기록을 삽입하는 것과 관련된 다양한 SQL 문과 해당 MongoDB 문이 제시되어 있습니다.

SQL 삽입 문
MongoDB insertOne() 문
INSERT INTO people(user_id,
age,
status)
VALUES ("bcd001",
45,
"A")
db.people.insertOne(
{ user_id: "bcd001", age: 45, status: "A" }
)

자세한 내용은 db.collection.insertOne()를 참조하세요.

다음 표에는 테이블에서 기록을 읽는 것과 관련된 다양한 SQL 문과 해당 MongoDB 문이 제시되어 있습니다.

참고

find() 메서드는 프로젝션을 통해 특별히 제외하지 않는 한 반환된 문서에 항상 _id 필드를 포함합니다. 아래 SQL 쿼리 중 일부에는 필드가 해당 find() 쿼리에 포함되어 있지 않더라도 이를 반영하기 위해 _id 필드가 포함될 수 있습니다.

SQL 선택 문
MongoDB find() 문
SELECT *
FROM people
db.people.find()
SELECT id,
user_id,
status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1 }
)
SELECT user_id, status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status = "A"
db.people.find(
{ status: "A" }
)
SELECT user_id, status
FROM people
WHERE status = "A"
db.people.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status != "A"
db.people.find(
{ status: { $ne: "A" } }
)
SELECT *
FROM people
WHERE status = "A"
AND age = 50
db.people.find(
{ status: "A",
age: 50 }
)
SELECT *
FROM people
WHERE status = "A"
OR age = 50
db.people.find(
{ $or: [ { status: "A" } , { age: 50 } ] }
)
SELECT *
FROM people
WHERE age > 25
db.people.find(
{ age: { $gt: 25 } }
)
SELECT *
FROM people
WHERE age < 25
db.people.find(
{ age: { $lt: 25 } }
)
SELECT *
FROM people
WHERE age > 25
AND age <= 50
db.people.find(
{ age: { $gt: 25, $lte: 50 } }
)
SELECT *
FROM people
WHERE user_id like "%bc%"
db.people.find( { user_id: /bc/ } )

-또는-

db.people.find( { user_id: { $regex: /bc/ } } )
SELECT *
FROM people
WHERE user_id like "bc%"
db.people.find( { user_id: /^bc/ } )

-또는-

db.people.find( { user_id: { $regex: /^bc/ } } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id ASC
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id DESC
db.people.find( { status: "A" } ).sort( { user_id: -1 } )
SELECT COUNT(*)
FROM people
db.people.count()

또는

db.people.find().count()
SELECT COUNT(user_id)
FROM people
db.people.count( { user_id: { $exists: true } } )

또는

db.people.find( { user_id: { $exists: true } } ).count()
SELECT COUNT(*)
FROM people
WHERE age > 30
db.people.count( { age: { $gt: 30 } } )

또는

db.people.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)
FROM people
db.people.aggregate( [ { $group : { _id : "$status" } } ] )

또는 BSON 크기 제한을 초과하지 않는 고유 값 세트의 경우

db.people.distinct( "status" )
SELECT *
FROM people
LIMIT 1
db.people.findOne()

또는

db.people.find().limit(1)
SELECT *
FROM people
LIMIT 5
SKIP 10
db.people.find().limit(5).skip(10)
EXPLAIN SELECT *
FROM people
WHERE status = "A"
db.people.find( { status: "A" } ).explain()

사용되는 메서드 및 연산자에 관한 자세한 내용은 다음을 참조하세요.

다음 표에는 테이블의 기존 기록을 업데이트 하는 것과 관련된 다양한 SQL 문과 해당 MongoDB 문이 제시되어 있습니다.

SQL 업데이트 문
MongoDB updateMany() 문
UPDATE people
SET status = "C"
WHERE age > 25
db.people.updateMany(
{ age: { $gt: 25 } },
{ $set: { status: "C" } }
)
UPDATE people
SET age = age + 3
WHERE status = "A"
db.people.updateMany(
{ status: "A" } ,
{ $inc: { age: 3 } }
)

예제에서 사용된 메서드 및 연산자에 관한 자세한 내용은 다음을 참조하세요.

다음 표에는 테이블에서 기록을 삭제하는 것과 관련된 다양한 SQL 문과 해당 MongoDB 문이 제시되어 있습니다.

SQL 삭제 문
MongoDB deleteMany() 문
DELETE FROM people
WHERE status = "D"
db.people.deleteMany( { status: "D" } )
DELETE FROM people
db.people.deleteMany({})

자세한 내용은 db.collection.deleteMany()를 참조하세요.

다음도 참조하세요.

SQL 애플리케이션을 MongoDB로 마이그레이션하려는 경우, MongoDB 애플리케이션 현대화 가이드 를 다운로드하세요.

다음과 같은 리소스가 다운로드에 포함됩니다.

  • MongoDB를 사용한 데이터 모델링 방법론에 대한 프레젠테이션

  • RDBMS 데이터 모델에서 MongoDB로 마이그레이션하기 위한 모범 사례와 고려 사항을 다룬 백서

  • RDBMS에 해당하는 MongoDB 스키마 참조

  • 애플리케이션 현대화 스코어카드

← 재시도 가능한 읽기