사용할 데이터 베이스 선택
use 데이터베이스이름
현재 사용중인 데이터 베이스 이름 확인
db
데이터 베이스 리스트 확인
show dbs
사용중인 데이터 베이스 DROP 하기
db.dropDatabase()
컬렉션 생성
db.createCollection("컬렉션이름",{옵션})
// 옵션에는 {capped : true / false, size : 10000, max : 1000}
// size 는 컬렉션의 크기(byte단위) 제한
// max 는 컬렉션의 개수 제한
컬렉션이 capped 인지 아닌지 확인
db.컬렉션이름.isCapped()
이미 생성된 컬렉션을 Capped 컬렉션으로 변경
db.runCommand({"convertToCapped":"컬렉션이름",size:10000})
도큐먼트 삽입 1
db.컬렉션이름.insert({필드명:"필드값"})
도큐먼트 삽입 2
db.컬렉션이름.insert(
{
필드명 1: "데이터" // 문자
필드명 2: 17 // 숫자
필드명 3: ["원소1", "원소2"] // 배열
}
)
도큐먼트 삽입 3 - 임베이드 도큐먼트 : 도큐먼트 안에 배열 형태로 여러 도큐먼트를 또 넣을 수 있다.
db.컬렉션이름.insert(
{
필드명 1 : "필드값"
필드명 2 : [ // 배열 형태로 삽입된다
{
필드명2-1-1 : "필드값",
필드명2-1-2 : "필드값"
},
{
필드명2-2-1 : "필드값",
필드명2-2-1 : "필드값"
}
]
}
)
도큐먼트 삽입 4 - insertMany()
db.컬렉션이름.insertMany( // 배열형태로 한번에 여러 도큐먼트를 넣을 수 있다.
[
{_id1, 필드명: "필드값", 필드명2: "필드값", 필드명3: 13},
{_id2, 필드명: "필드값", 필드명2: "필드값", 필드명3: 14},
{_id3, 필드명: "필드값", 필드명2: "필드값", 필드명3: 15},
]
)
도큐먼트 입력 검증
db.createCollection("컬렉션이름",
{
validator: {
필드명1: {$type: "string"}, // string, boolean, array, int 등 데이터형 옵션
필드명2: {$in:["Seoul", "Cheongju"]} // 순서 상관 없음. 배열의 원소들안에서 데이터 제한.
}
}
)
도큐먼트 검색
db.컬렉션이름.find().pretty()
도큐먼트 검색 : Projection
db.컬렉션이름.find({필드명: "필드값", 필드명2: "필드값"}, {"필드명" : 1}) // 뒤에 0이면 해당 필드값을 숨기고 1이면 보여줌
*db.컬렉션이름.find({}),{필드명: 1, 필드명2 :0}) 다음과 같은 옵션을 불가능. 필드명 여러개 혼합 불가.
숨길것만 0 Flag. 플래그 없는건 무조건 표기.
도큐먼트 검색 : Query Operator (쿼리 연산자)
db.컬렉션이름.find({필드명:{$쿼리연산자:조건값}})
//$eq = equal
//$gt = greater than
//$gte = greater equal
//$lt = less than
//$lte = less equal
//$ne = not equal
db.컬렉션이름.find({필드명:{$쿼리연산자["필드값", "필드값"]}) // 순서 Sensitive X
//$in = 배열에 해당 값이 있는지 (있으면 보여줌)
//$nin = 배열에 해당 값이 없는지 (없으면 보여줌)
ex) [1,2,3,4,5]를 조건으로 검색했을때
$in[1,2,6] 해도 나옴 즉, OR 검색이다.
도큐먼트 검색 : Logical Operator (논리 연산자)
db.컬렉션이름.find({$논리연산자: [{필드명: "필드값"}, {필드명2:"필드값"}]})
db.컬렉션이름.find({$논리연산자: [{필드명: "필드값"}, {필드명2: {$쿼리연산자: 조건값}}]})
//$and
//$not
//$nor
//$or
도큐먼트 검색 : 임베디드 도큐먼트 접근
db.컬렉션이름.find({필드명: {필드명1: "필드값", 필드명2: "필드값", 필드명3: "필드값"}})
db.컬렉션이름.find({"필드명.필드명1": "필드값", "필드명.필드명2": "필드값"})
//위와 같이 검색시 전체가 완전히 같은 결과만 보여줌 (AND 연산 검색)
db.컬렉션이름.find({필드명: {$elemMatch: {"임베디드필드명": "필드값"}}})
//위와 같이 검색시 도큐먼트 안에 해당값이 포함되는 결과값 보여줌 (OR 연산 검색)
도큐먼트 검색 : 배열 원소 접근
db.컬렉션이름.find({필드명: ["배열원소1", "배열원소2"]})
// 배열에 순서, 갯수 정확히 일치하는 결과만 보여줌
db.컬렉션이름.find({필드명: {$all: ["배열원소1", "배열원소2"]}})
// 배열에 포함만 되면 다 보여줌 (OR 연산 검색)
// *인덱스 값으로 접근시 0 베이스 인덱싱임으로 주의할것
db.컬렉션이름.find({필드명: {$elemMatch : {$gt:80, $lt:90}}})
// 임베디드 도큐먼트 뿐만 아니라 쿼리연산자를 활용하여 배열에도 사용 가능
도큐먼트 검색 : 배열 길이를 통한 접근
db.컬렉션이름.find({"필드명": {$size: n}}) //원소의 개수가 n 개인 배열 검색
db.컬렉션이름.find({"필드명": {$size {$쿼리연산자 : n}}}) //쿼리 연산자 또한 사용가능
db.컬렉션이름.find({$where: "this.필드명.length > n"}) //자바스크립트 조건문검색의 형태도 사용가능
도큐먼트 검색 : null 값
db.컬렉션이름.find({"필드명": null}) //null값을 갖는 필드 찾기
db.컬렉션이름.find({"필드명": {$ne:null}}) //null 값이 아닌 필드 찾기
도큐먼트 검색 : 존재 여부
db.컬렉션이름.find({"필드명": {$exists: true/false}}) // 해당 필드명이 있는 문서가 있는지 없는지 *exists "s" 안붙이는 실수 자주함
도큐먼트 검색 : regex
db.컬렉션이름.find({"필드명": {$regex: "XX"}}) //필드값에 XX 를 포함하는 문서를 검색. 대소문자 구분.
db.컬렉션이름.find({"필드명": {$regex: "XX", options: 'i'}}) //대소문자 구분 X
db.컬렉션이름.find({"필드명": {$regex: "^XX"}}) //첫자리가 XX 인것 찾기
db.컬렉션이름.find({"필드명": {$regex: "XX$"}}) //끝자리가 XX 인것 찾기
db.컬렉션이름.find({"필드명": {$regex: "^XX$"}}) //딱 XX인것 찾기
도큐먼트 수정 - update 수정 : 필드단위 수정
db.컬렉션이름.update({필드명: "필드값"}, {$set: {필드명: "수정할필드값"}}) //하나만 수정됨
db.컬렉션이름.update({필드명: "필드값"}, {$set: {필드명: "수정할필드값"}}, {multi: true}) //전부 수정됨
*주의 : update 할 필드명과, 수정될 필드명이 달라지면 set에 설정한 필드명과 필드값으로 새롭게 추가된다.
도큐먼트 수정 - save : 덮어쓰기 - 필드 갯수도 달라질때
db.컬렉션이름.save({필드명: "필드값", 필드명2: "필드값", 필드명3: "필드값"})
도큐먼트 삭제
db.컬렉션이름.remove({}) //전체 삭제
db.컬렉션이름.remove({필드명 : '필드값'}, 1) //해당 필드값을 가지는 레코드 하나만 삭제
db.컬렉션이름.remove({필드명 : '필드값'}) //해당 필드값을 가지는 레코드 전부 삭제
Aggregation Framework
db.컬렉션이름.aggregate(
[
{$match: {}},
{$sort: {}},
{$project: {}},
{$limit: {}},
{$skip: {}},
{$group: {_id: "$그룹명으로 만들 필드명"}},
{$count: {}},
{$unwind {}},
{$out: {}},
]
)
//다음과 같은 함수 연산자 사용 가능
//$max
//$min
//$avg
//$sum
//$addToSet
//$push
//$first
//$last
인덱싱 : 몽고디비는 기본적으로 _id 필드 인덱싱으로 한다 (_id 필드는 독립된 데이터 type을 가진다)
db.컬렉션이름.createindex({"필드명" : -1 or 1}) //1은 오름차순 인덱싱, -1은 내림차순 인덱싱
db.컬렉션이름.createinder({"필드명" : 1, "필드명2": -1}) //여러개의 필드에 대해 인덱싱도 가능
explain() : 쿼리문의 수행 내역을 출력
쿼리문 뒤에 .explain("executionStats")