AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

SQL - MongoDB 매핑 차트

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

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

SQL 용어/개념
MongoDB 용어/개념

database

테이블

행

문서 또는 BSON 문서

열

index

테이블 결합

$lookup, 내장된 문서

기본 키

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

기본 키

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

집계(예: 그룹화 기준)

집계 파이프라인

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

NEW_TABLE로 선택

$out

SQL-집계 매핑 차트를 참조하세요.

테이블로 병합

$merge

SQL-집계 매핑 차트를 참조하세요.

모두 통합

트랜잭션

트랜잭션

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

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

MongoDB
MySQL
Oracle
Informix
DB2

Database Server

mysqld

oracle

IDS

DB2 Server

데이터베이스 클라이언트

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 peopleADD join_date DATETIME

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

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

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

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

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

db.people.updateMany( { }, { $unset: { "join_date": "" } })
CREATE INDEX idx_user_id_ascON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX idx_user_id_asc_age_descON 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, statusFROM people
db.people.find( { }, { user_id: 1, status: 1 })
SELECT user_id, statusFROM people
db.people.find( { }, { user_id: 1, status: 1, _id: 0 })
SELECT *FROM peopleWHERE status = "A"
db.people.find( { status: "A" })
SELECT user_id, statusFROM peopleWHERE status = "A"
db.people.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 })
SELECT *FROM peopleWHERE status != "A"
db.people.find( { status: { $ne: "A" } })
SELECT *FROM peopleWHERE status = "A"AND age = 50
db.people.find( { status: "A", age: 50 })
SELECT *FROM peopleWHERE status = "A"OR age = 50
db.people.find( { $or: [ { status: "A" } , { age: 50 } ] })
SELECT *FROM peopleWHERE age > 25
db.people.find( { age: { $gt: 25 } })
SELECT *FROM peopleWHERE age < 25
db.people.find( { age: { $lt: 25 } })
SELECT *FROM peopleWHERE age > 25AND age <= 50
db.people.find( { age: { $gt: 25, $lte: 50 } })
SELECT *FROM peopleWHERE user_id like "%bc%"
db.people.find( { user_id: /bc/ } )

-또는-

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

-또는-

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

or

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

or

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

or

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 peopleLIMIT 1
db.people.findOne()

or

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

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

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

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

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

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

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

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

이 페이지 평가하기