Posts MongoDB 초급(2)
Post
Cancel

MongoDB 초급(2)

1. 조회(Find)


1.1 Find

1
db.collection.find(query, projection)
  • Query : Document 조회 조건을 설정, 모든 Document를 조회 할때는 ({})를 사용함
  • Projection : Document를 조회할때 보여지는 필드(컬럼)를 정의


2. Query

2.1 기본 Document 조회

1
2
db.info.info()
db.getCollection('info').find({})
  • info 컬렉션에 있는 모든 Document 조회


1
db.info.find({'subject' : 'python'})
  • Subject가 Python인 Document 조회


2.2 비교 연산자

1
db.info.find({'level':{$lt:2}})
  • {$lt:n} : n 미만인 데이터 조회
  • Level이 2 미만인 Document를 조회


1
db.info.find({'level':{$lte:2}})
  • {$lte:n} : n 이하인 데이터 조회
  • Level이 2 이하인 Document를 조회


1
db.info.find({'level' : {$gt : 3}})
  • {$gt : n} : n 초과인 데이터 조회
  • Level이 3 초과인 Document를 조회


1
db.info.find({'level' : {$gte : 3}})
  • {$gte : n} : n 이상인 데이터 조회
  • Level이 3 이상인 Document를 조회


1
db.info.find({'subject':{$in:['java','python']}})
  • {$in:[‘a’,’b’]} : 특정 key값이 a,b인 경우에 사용
  • Subject가 Java와 Python을 포함하는 Document 조회


2.3 논리 연산자

1
db.info.find({$and :[{'subject' : 'python'}, {'level' : {$gte:3}}]})
  • $and : 모든 조건이 True이면 True
  • Subject가 Python이고 Level이 3 이상인 Document 조회


1
db.info.find({$nor: [{'subject':'python'}, {'level':{$lte : 1}}]})
  • $nor : 조건중 하나라도 False면 True
  • Subject가 Python이 아니고 Level이 1이하가 아닌 Document 조회


1
db.info.find({'level':{$not:{$gt:2}}})
  • $not : 조건중 하나라도 False면 True
  • Level이 2보다 크지 않은 Document 조회 (2포함)


1
db.info.find({$or :[{'subject' : 'python'}, {'level' : {$gte:3}}]})
  • $or : 조건중 하나라도 True이면 True
  • Subject가 Python이거나 Level이 3 이상인 Document 조회


2.4 Where

1
db.info.find({$where : 'this.level == 1'})
  • $Where 연산자를 사용하면 자바스크립트 표현식 사용이 가능
  • Level이 1인 Document 조회


3. Projection


3.1 Projection

1
2
3
db.info.find({},{'_id':false, 'level':false})
db.info.find({},{'subject':true, 'level':true})
db.info.find({},{'_id':false,'subject':true, 'level':true})
  • Document를 조회할때 보여지는 필드(컬럼)를 정의
  • Subject와 Comments만 출력하도록 Find
  • 설정을 True 값을 설정하던가 False값을 설저
  • _id는 따로 설정을 안하면 True임


4. Find Method


4.1 Find Method

Find Method를 사용하면 Find를 사용한 Documen의 결과를 가공하여 출력함


4.2 Sort

1
sort({key:value})
  • Document를 정렬시킴
  • Key : 정렬할 필드명
  • Value : 오름차순 1, 내림차순은 -1


1
db.info.find().sort({'level':1})
  • Info 컬렉션의 Document를 Level 오름차순으로 정렬


1
db.info.find().sort({'level':-1})
  • Info 컬렉션의 Document를 Level 내림차순으로 정렬


1
db.info.find().sort({'level' : -1, 'subject':1})
  • Level을 기준으로 내림차순으로 정렬 후 Subject를 기준으로 오름차순으로 정렬


4.3 Limit

1
db.info.find().limit(3)
  • Limit을 사용하면 Document 출력 결과의 수를 제한 할수 있음
  • Documnet의 결과를 3개 까지만 출력


1
db.info.find().sort({'level' : -1}).limit(3)
  • Document의 결과를 Level로 내림차순으로 정렬하고 3개까지만 출력


4.4 Skip

1
db.info.find().skip(2)
  • Skip을 검색한 Document의 결과의 시작부분을 설정할때 사용
  • Document를 3번째부터 출력
  • Limit, Skip을 함께 사용해서 MySQL의 Limit과 같이 사용하수 있음


5. Update


5.1 Update

1
db.collection.update(query, update, {upsert : <bool>, multi:<bool>})
  • Upsert : Insert와 Update의 합성어로 데이터가 있으면 Update, 없으면 Insert 한다는 의미
  • Multi : True로 설정되면 여러개의 Document를 수정함, 기본값은 False


1
2
3
4
5
6
7
8
9
10
db.info.update(
    {'subject' : 'html'},
    {'subject' : 'sass','level' : 2}
)

db.info.update(
    {'subject' : 'less'},
    {'subject' : 'less', 'level' : 2},
    {'upsert' : true}
)
  • 특정 Document를 새로운 Document로 수정하기


5.2 Set, Unset

1
db.info.update({subject : 'java'}, {$set:[level:4]})
  • $set을 사용하면 특정 Document의 필드를 수정함
  • Java의 Level을 4로 수정
  • 한개의 데이터만 수정이 됨


1
2
3
4
5
db.info.update(
    {level:2},
    {$set : {level:1}},
    {multi : true}
)
  • Level 2를 Level 1로 수정
  • 여러개의 데이터를 수정


1
2
3
4
db.info.update(
    {subject : 'sass'},
    {$unset:{level:1}}
)
  • Subject가 Sass인 Documnet의 Level필드 삭제
  • Level:1의 1인 true를 의미함


1
2
3
4
5
db.info.update(
    {level : {$lte:3}},
    {$set : {level:1}},
    {multi : 1}
)
  • Level이 3이하인 데이터를 1로 수정하기


1
2
3
4
5
db.info.update(
    {level:{$exists:false}},
    {$set:{level:2},
    {multi : 1}}
)
  • Level이 없는 데이터에 Level 추가하기


6. 함수 (Function)


6.1 Function

1
2
3
4
var showSkip = function(start){
    return db.info.find().skip(start-1)
}
showSkip(3)
  • 자바스크립트 문법으로 함수 작성 가능
  • Skip 함수를 생성
This post is licensed under CC BY 4.0 by the author.