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 |