https://docs.mongodb.com/manual/reference/sql-comparison/

용어및 개념#

SQL 용어및 개념 MongoDB 용어및 개념
데이터베이스 데이터베이스
테이블 컬렉션
로우 문서 또는 BSON 문서
칼럼 필드
인덱스 인덱스
테이블 조인 $lookup, 내장문서
기본키 기본키 (_id 필드에 자동으로 설정됨)
그룹함수 (group by) 그룹 파이프라인(Aggregation Mapping Chart 참고)
SELECT INTO NEW_TABLE $out
MERGE INTO TABLE $merge (몽고디비 4.2부터 사용가능, (Aggregation Mapping Chart 참고)
트랜잭션 트랜잭션

예제#

예제용 샘플 데이터

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

생성및 변경#

테이블 생성#

CREATE TABLE people (
    id MEDIUMINT NOT NULL
        AUTO_INCREMENT,
    user_id Varchar(30),
    age Number,
    status char(1),
    PRIMARY KEY (id)
)

몽고디비는 insertOne() 나 insertMany() 를 처음 사용할 경우 컬렉션이 없다면 생성한다. 기본키인 _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

앞서 본 칼럼 추가와 같은 맥락이다. 삭제한 필드는 $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()

데이터 입력#

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

데이터 조회#

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" } } ] )
// or, for distinct value sets that do not exceed the BSON size limit
// 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()
  1. db.collection.find()
  2. db.collection.distinct()
  3. db.collection.findOne()
  4. limit()
  5. skip()
  6. explain()
  7. sort()
  8. count()
  9. $ne
  10. $and
  11. $or
  12. $gt
  13. $lt
  14. $exists
  15. $lte
  16. $regex

데이터 수정#

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 } })

데이터 삭제#

DELETE FROM people
WHERE status = "D"

// db.people.deleteMany( { status: "D" } )

DELETE FROM people

// db.people.deleteMany({})

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-3) was last changed on 12-Oct-2019 11:51 by DongGukLee  
G’day (anonymous guest) My Prefs

Referenced by
NoSQL

JSPWiki v2.8.4