2019. 9. 16. 22:57ㆍDatabase/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 쿼리 비교였습니다. 이보다 더 많은 기능들이 있지만 추후 천천히 다루어보겠습니다.
'Database > MongoDB' 카테고리의 다른 글
| DB - MongoDB Insert Ordered 옵션은? (0) | 2019.09.19 | 
|---|---|
| DB - MongoDB Text Search(본문 검색) (0) | 2019.09.16 | 
| DB - MongoDB CRUD 사용방법 및 기타 사용방법 - 3 (0) | 2019.09.16 | 
| DB - MongoDB CRUD 사용방법 및 기타 사용방법 - 2 (0) | 2019.09.16 | 
| DB - MongoDB CRUD 사용방법 및 기타 사용방법 - 1 (0) | 2019.09.13 |