DB - MongoDB와 자주 사용되는 SQL 비교

2019. 9. 16. 22:57Database/MongoDB

 

이번 포스팅 내용은 자주 사용되는 SQL문과 MongoDB와의 쿼리를 비교하는 포스팅입니다. 

 

SQL Schema Statements MongoDB Schema Statements

CREATE TABLE people(

id MEDIUMINT NOT NULL AUTO_INCREMENT,

user_id varchar(30),

age number,

status char(1),

PRIMARY KEY(id)

)

db.people.insertOne({

user_id:"abc123",

age:55,

status:"A"

})

암시적으로 삽입 작업에서 _id를 생략했다면 내부적으로 _id에 값을 추가한다. 컬렉션 또한 삽입시점에 생성된다.

 

그러나 컬렉션을 명시적으로 생성가능하다.

 

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과 비교한 몽고디비 명령이다.

 

Insert

 

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

 

Select

암묵적으로 몽고디비는 _id 필드를 결과에 포함시킨다. 만약 _id 필드를 결과에서 제외시키고 싶다면 명시적으로 옵션을 지정해야한다.

SQL Select Statements MongoDB find() Statements
SELECT * FROM PEOPLE db.people.find()
SELECT id,user_id,status FROM people db.people.find({},{user_id:1,status:1})
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 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/})

or

db.people.find({user_id:{$regex:/bc/}})

SELECT * FROM people WHERE user_id LIKE "bc%"

db.people.find({user_id:/^bc/})

or

db.people.find({user_id:{$regex:/^bc/}})

SELECT * FROM people WHERE status = "A" ORDER BY user_id ACS 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()

or

db.people.find().count()

SELECT COUNT(user_id) FROM people

db.people.count({user_id:{$exist:true}})

or

db.people.find({user_id:{$exist:true}}).count()

SELECT COUNT(*) FROM people WHERE 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"}}])

or

db.people.distinct("status")

SELECT * FROM people LIMIT 1

db.people.findOne()

or

db.people.find().limit(1)

SELECT * FROM people LIMIT 5 SKIP 10 db.people.find().limit(5).skip(10)

 

Update Records

 

SQL Update Statements MongoDB updateMany() Statements
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 Records

 

SQL Delete Statements MongoDB deleteMany() Statements
DELETE FROM people WHERE status = "D" db.people.deleteMany({status:"D"})
DELETE FROM people db.people.deleteMany({})

 

여기까지 자주 사용되는 SQL에 대한 MongoDB 쿼리 비교였습니다. 이보다 더 많은 기능들이 있지만 추후 천천히 다루어보겠습니다.