NoSQL vs SQL
SQL | NoSQL |
---|
규칙에 맞는 데이터 | 자유로운 데이터 |
join 지원 | join 미지원 |
안정성, 일관성 | 확장성, 가용성 |
테이블, 로우, 컬럼 | 컬렉션, 도큐먼트, 필드 |
기본 명령
1) DB 관련
> show dbs
> db
> db.status()
> use [데이터베이스명]
> db.dropDatabase()
2) Collection 관련
> db.createCollection('컬렉션명')
> db.[컬렉션명].drop()
> show collections
3) 기타 연산자
-
비교 연산자
operator | 설명 |
---|
$eq | (equals) 주어진 값과 일치하는 필드 |
$ne | (not equals) 주어진 값과 일치하지 않는 값을 가진 필드 |
$gt | (greater than) 주어진 값보다 큰 필드 |
$gte | (greather than or equals) 주어진 값보다 크거나 같은 필드 |
$lt | (less than) 주어진 값보다 작은 필드 |
$lte | (less than or equals) 주어진 값보다 작거나 같은 필드 |
-
논리 연산자
operator | 설명 |
---|
$or | 여러개 조건 중 적어도 하나를 만족하는 document |
$and | 여러개 조건을 모두 만족하는 document |
$nor | 여러개 조건을 모두 만족하지 않는 document |
$not | 조건을 만족하지 않는 필드 |
$exists | 특정 필드를 가지고 있을 경우 반환 |
-
집합 연산자
operator | 설명 |
---|
$ne | (not equal) 주어진 값과 일치하지 않는 값 |
$in | 주어진 배열 안에 속하는 값 |
$nin | 주어빈 배열 안에 속하지 않는 값 |
-
제한자
operator | 설명 |
---|
$inc | 값 증가 / 감소 |
$mul | 곱하기 |
$divide | 나누기 |
$rename | 필드 이름 변경 |
$set | 필드 값 변경, 필드 없을경엔 추가 |
$unset | 필드 제거 |
Create
insertOne(document, writeConcern) : 1개의 도큐먼트 생성
intertMany(document, writeConcern, ordered) : 여러개의 도큐먼트 생성
parameter | 설명 |
---|
document | 컬렉션에 삽입할 문서 |
writeConcern | 요청에 대한 response를 어느 시점에 주는지에 대한 동작 방식 |
ordered | 정렬여부 |
> db.[컬렉션명].insertOne({name:"park", age:26})
> db.[컬렉션명].insertMany([
{name:"이새롬", age: 26},
{name:"송하영", age: 26},
{name:"장규리", age: 26},
{name:"박지원", age: 25},
{name:"노지선", age: 25},
{name:"이서연", age: 23},
{name:"이채영", age: 23},
{name:"이나경", age: 23},
{name:"백지헌", age: 20}
])
Read
findOne(query, projection) : 한개의 도큐먼트 조회
find(query, projection) : 여러개의 도큐먼트 조회
parameter | 설명 |
---|
query | document를 조회할 기준 |
projection | 보여질 필드 지정 |
> db.[컬렉션명].findOne()
> db.[컬렉션명].findOne({status:"A"})
> db.[컬렉션명].findOne({status:"A"}, {age:1, _id:0});
> db.[컬렉션명].find()
> db.[컬렉션명].find({},{_id:0, name:1, age:0})
> db.[컬렉션명].find({status:"A"})
> db.[컬렉션명].find({status:"A", age:50})
> db.[컬렉션명].find({$or:[{status:"A"}, {age:50}]})
> db.[컬렉션명].find({age:{$gt:25}})
> db.[컬렉션명].find({age:{$gt:25, $lte:50}})
> db.[컬렉션명].find({$or:[{age:5}, {age:15}]})
> db.[컬렉션명].find({user_id:/bc/})
> db.[컬렉션명].find({user_id:/^bc/})
> db.[컬렉션명].count()
> db.[컬렉션명].count({user_id:{$exists:false}})
> db.[컬렉션명].count({age:{$gt:30}})
== db.[컬렉션명].find({age:{$gt:30}}).count()
> db.[컬렉션명].distinct("도큐먼트명")
> db.[컬렉션명].find().limit(2)
> db.[컬렉션명].find({status:"A"}).sort({user_id:1})
> db.[컬렉션명].find({status:"A"}).sort({user_id:-1})
Update
updateOne(query, update, options) : 한개의 도큐먼트 업데이트
updateMany(filter, update, options) : 여러개 도큐먼트 업데이트
parameter | description |
---|
query | 업데이트할 도큐먼트 |
update | 업데이트할 내용 |
option | 옵션 |
filter | 업데이트할 도큐먼트, { }만 사용시 전체 도큐먼트 |
> db.[컬렉션명].updateOne({name:'이나경'}, {$set:{age:24}})
> db.[컬렉션명].updateMany({status:"A"}, {$inc:{age:3}})
> db.[컬렉션명].updateMany({age:{$gt:40}}, {$set:{status:"B"}})
Delete
deleteOne(query) : 한개의 도큐먼트 삭제
deleteMany(query) : 여러개 도큐먼트 삭제
parameter | description |
---|
query | 삭제할 도큐먼트 |
> db.[컬렉션명].deleteOne({status:"A"})
> db.[컬렉션명].deleteMany({})
> db.[컬렉션명].deleteMany({age:{$lt:30}})