728x90

사용할 데이터 베이스 선택

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")

+ Recent posts