mongodb studio3t

brave_chicken·2024년 6월 8일

잇(IT)생 챌린지

목록 보기
65/90

mongodb - nosql

1. 데이터삽입

  • insert
  • insertMany
  • insertOne
db.emp.insert({id:"jang",name:"장동건"})

db.customer.insertOne({id:"jang",pass:"1234",name:"장동건",info:{city:["서울","인천","강릉"],
toeicjumsu:[700,800,650,850,855]}})

db.customer.insertMany([
	{id:"lee",pass:"1234",name:"이민호",info:{city:["천안","부산","제천"],toeicjumsu:[555,780,650,900,855]}},
	{id:"bts1",pass:"1234",name:"슈가",info:{city:["천안","부산","제천"],toeicjumsu:[555,780,650,900,855]}},
	{id:"bts2",pass:"1234",name:"석진",info:{city:["천안","부산","제천"],toeicjumsu:[450,500,558,850,950]}},
	{id:"bts3",pass:"1234",name:"뷔",info:{city:["천안","부산","제천"],toeicjumsu:[555,780,650,900,855]}}
])

2. 데이터조회

db.collection명.find(조건,조회할필드에 대한 정보)

                  ---- -------------------------
                  query     projection
  • query나 projection은 json으로 표기
  • 조회할 필드의 정보
    형식 : {필드명:1} {필드명:true} - 출력할 필드
    {}안에 아무 필드도 정의하지 않으면 전체 필드를 조회하겠다는 의미

1) 메소드

  • count() : 조회된 결과의 갯수를 출력
  • limit(숫자) : 숫자만큼 결과를 확인
  • sort({컬럼:1}) - 오름차순
  • sort({컬럼:-1}) - 내림차순

2) 조건이 일치하는 경우

  • json형식으로 조건을 명시
  • and나 or을 명시하지 않으면 조건은 기본이 and조건
    ex) addr이 인천인 데이터 조회(id,name,dept,addr만 조회)
db.score.find({addr:"인천"},{id:1,name:1,dept:1,addr:true})

3) 비교연산자

  • $lt (less than) : <
  • $gt(greater than):>
  • $lte(less than or equal): <=
  • $gte(greater than or equal) : >=
  • $in:하나의 필드에 조건을 여러 개 적용(오라클의 in연산자와 동일)
  • $nin:조건을 제외한 도큐먼트조회(오라클의 not in과 동일)
 db.컬렉션명.find({조회할필드:{연산자: 값}})
 
 ex) score컬렉션에서 java가 90점 이상인 document를 조회

	db.score.find({java:{$gte:90}},{})
                     	 --------
                       	   >=90
 
 and조건
 ex) 부서가 인사이면서 자바점수가 80점이상인 사원
    
    db.score.find({dept:"인사",java:{$gte:80}})

4) 논리연산자

  • $or : or조건
  • $and : and조건
  • 조건이 여러 개 이므로 배열로 조건을 표현한다.
  • 각각의 조건은 json 오브젝트로 표현
 ex)오류상황
   	db.score.find({$and:{dept:"인사",java:{$gte:80}}})
       
    오류해결
    db.score.find({$and:[{dept:"인사"},{java:{$gte:80}}]})
       
 	db.score.find({$or:[{id:"hong"},{id:"kang"},{id:"jang"}]})
       
	$in이용
     db.score.find({필드:{연산자:값}})
     db.score.find({id:{$in:["hong","kang","jang"]}})

5) 예제

  1. exam collection에서 이름과 주소와 servlet점수를 출력해보자
  2. exam collection에서 java점수 중 70점 이상을 출력해보자
  3. exam collection에서 이름, java점수를 출력하고 java가 90점 이상인 사람만 출력해보자
  4. exam에서 dept가 인사이면서 addr이 안양이거나 대구인 document 출력
  5. servlet이 70에서 90사이이며 dept가 총무인 document 조회

6) null체크

  • 필드가 존재하지 않거나 필드가 null인 도큐먼트 조회
db.컬렉션명.find({필드:null})
  • $ne
    필드가 존재하고 null이 아닌 값을 갖는 도큐먼트 조회
db.컬렉션명.find({필드:{$ne:null}})
  • $exists
    필드가 존재하는지 유무를 검사
db.컬렉션명.find({필드:{$exists:true}})
db.컬렉션명.find({필드:{$exists:false}})

7) 정규표현식

  • 패스워드
  • 비정형데이터에서 원하는 문자열 찾기
  • 기호가 갖고 있는 의미를 해석해서 판단

[패턴문자]
^ - 문자열의 시작
$ - 문자열의 종료
| - or의 의미
[] - 문자의 집합
[a-zA-Z0-9] : 영문의 소문자, 대문자, 숫자 모두 포함 유무

[옵션]
i -> 대소문자 구분없이 조회

db.컬렉션명.find({필드:/정규표현식/옵션})
db.컬렉션명.find({필드:{$regex:"패턴", $options:"옵션"}})

3. 데이터 수정

  • update, upadateOne, updateMany, replaceOne

    [구문]
    db.컬렉션명.update(filter, update, options)
    filter - 조건
    update - 변경할 필드와 값을 명시
    options - update를 위해서 설정할 값

1) Filter

  • RDBMS의 update문의 where절
  • {조건필드 : 값}

2) update

  • 업데이트 연산자와 함께 명시
  • $set 연산자를 이용
  • 옵션을 주지 않으면 먼저 찾는 도큐먼트만 수정

3) options

multi옵션 : multi옵션을 true로 지정해야 조건에 만족하는 모든 데이터가 변경된다.

4. 배열데이터 수정

1) $addToSet

  • 배열에 요소를 추가
  • 중복을 호용하지 않는다.

2) $pop

  • 배열의 첫번째 요소나 마지막 요소를 제거
  • 옵션으로 1을 정의하면 배열의 마지막요소를 제거하고 -1을 정의하면 배열의 첫번째 요소를 제거

3) $pull

  • 조건에 맞는 요소의 값을 제거
  • 원하는 배열의 요소를 여러 개 제거할 수 있는 연산자

4) $pullAll

  • 배열의 요소를 여러 개 제거할 수 있는 연산자

5) $push

  • 배열이 존재하면 배여르이 끝에 요소를 추가하고 존재하지 않으면 새로운 배열을 생성
  • 중복된 데이터가 추가될 수 있다.

6) $each

  • addToSet이나 push에서 한번에 여러개의 요소를 추가하는 경우 사용
db.컬렉션명.update({조건},{$push:{"객체명.객체에 정의한 속성명":{$each:[값1, 값2, 값3,...]}}}})

실습

find

db.score.find({})
db.score.insertOne({id:"jang",pass:"1234"})

//널체크 - 필드가 존재하지 않거나 필드가 null인 도큐먼트 반환
db.score.find({java:null})
db.score.find({favorites:null})

//연산자 이용해서 비교하기 - $ne(not equal)
//필드가 존재하고 null이 아닌 값을 갖는 도큐먼트를 조회
db.score.find({favorites:{$ne:null}})
db.score.find({java:{$ne:null}})

//필드의 존재유무를 검사 - java필드가 있는 도큐먼트만 조회
db.score.find({java:{$exists:true}})
db.score.find({java:{$exists:false}})

//정규표현식 - id가 kim이나 park (소문자)인 도큐먼트 조회
db.score.find({id:/kim|park/})

//i 옵션으로 대소문자 구분없이 모두 조회
db.score.find({id:/kim|park/i})

//id가 k로 시작하는 도큐먼트 조회
db.score.find({id:/^k/})

//id가 m으로 끝나는 도큐먼트 조회
db.score.find({id:/g$/})

//id에 특정 글자가 있는 도큐먼트 조회 - 지정한 문자들 사이의 모든 문자
db.score.find({id:/[d-f]/})//d,e,f가 포함
db.score.find({id:/^[d-f]/})//d,e,f로 시작하는

//id에 특정글자가 있는 도큐먼트 조회 - 지정한 문자만 포함
db.score.find({id:/[jlm]/})//j,m,l
db.score.find({id:/[lm]/})

db.score.findOne()//첫번째 조회
db.score.find({}).skip(2).limit(5)//위에서 두개 스킵 후 이후 5개 조회

db.score.find({servlet:{$not:{$exists:null}}})




db.getCollection("exam").find({})

//1. exam에서 이름에 김씨인 사람 조회해보기
db.exam.find({name:/^김/})

//2. exam에서 servlet점수가 가장 낮은 document와 가장 높은 document 출력하기
db.exam.find({servlet:{$not:{$exists:null}}}).sort({servlet:1}).limit(1)
db.exam.find({servlet:{$not:{$exists:null}}}).sort({servlet:-1}).limit(1)
​
//3. java점수가 가장 높은 document중에 7개를 출력하되 2개를 건너뛰고 출력해보자
db.exam.find({}).sort({java:-1}).skip(2).limit(7)

//4. 아이디에 n과 o가 들어가는 document 구하기
db.exam.find({id:/[no]/})

update

db.getCollection("score").find({})

for(let i=1100;i<=1120;i++){
    db.emp.insert({id:i,msg:"test"+i})
}
db.emp.insertOne({id:"bts", name:"방탄소년단", pass:"1234"})
db.emp.insertOne({id:"bts11", name:"방탄소년단", pass:"1234"})
db.emp.update({id:"bts"},{$set:{pass:"123456"}},{multi:true})
db.emp.insertOne({id:"lee", name:"bts",val:1000})
db.emp.updateMany({id:"lee"},{$inc:{val:100}})

db.emp.find({})

db.exam.find({})
//1. id가 kang인 사람의 dept를 "총무"로 변경
db.exam.update({id:"kang"},{$set:{dept:"총무"}})

//2. dept가 "전산"인 모든 사람들의 addr을 "안양"으로 변경
db.exam.update({detp:"전산"},{$set:{addr:"안양"}},{multi:true})
​
//3. id가 jang인 document의 bonus를 1000추가하기
db.exam.update({id:"jang"}, {$inc:{bonus:1000}})

//4. dept가 총무인 모든 document에 bonus를 2000추가하기
db.exam.updateMany({dept:"총무"}, {$inc:{bonus:2000}})

//5. addr이 서울인 사용자들의 mgr을 jang으로 변경
db.exam.updateMany({addr:"서울"}, {$set:{mgr:"jang"}})

update array

db.getCollection("customer").find({})

//배열데이터 수정 연산자
//배열데이터를 추가
db.score.update({id:"jang"},{$set:{
                                    favorite:{
                                        city:["서울","안산"],
                                        movie:["변호인","겨울왕국2","파묘"]
                                    
                                    }
                                 }
                            })
                            
db.score.updateMany({id:"jang"},{$push:{"favorite.city":"천안"}})
db.score.updateMany({id:"jang"},{$addToSet:{"favorite.city":"가평"}})
db.score.updateMany({id:"jang"},{$pop:{"favorite.city":1}})
db.score.updateMany({id:"jang"},{$pop:{"favorite.city":-1}})

//원하는 요소 제거하기
db.score.updateMany({id:"jang"},{$pull:{"favorite.city":"광주"}})
db.score.updateMany({id:"jang"},{$pull:{"favorite.city":"부산"}})

db.score.updateMany({id:"jang"},{$push:{"favorite.city":"양양"}})
db.score.updateMany({id:"jang"},{$push:{"favorite.city":"과천"}})
db.score.updateMany({id:"jang"},{$push:{"favorite.city":"양산"}})

//pullAll을 이용해서 여러 개의 요소를 제거
db.score.updateMany({id:"jang"},{$pullAll:{"favorite.city":["양양","양산"]}})

//여러개의 요소를 배열에 추가하기 - **틀린경우**
db.score.updateMany({id:"jang"},{$push:{"favorite.city":["고성","수원","부천"]}})
//위의 잘못추가된 배열을 삭제
db.score.updateMany({id:"jang"},{$pullAll:{"favorite.city":[["고성","수원","부천"]]}})
//db.score.update({id:"jang"},{$pull:{"favorite.city":["고성","수원","부천"]}})

db.score.updateMany({id:"jang"},{$push:{"favorite.city":{$each:["고성","수원","부천"]}}})

db.score.find({})
db.customer.find({})

db.exam.find({})
//1. song,jang,hong에 다음과 같은 값을 가질 수 있도록 배열로 필드를 추가하세요
//song : history (영업1팀, 총무, 기획실)
//jang: history(전략팀,총무,전산)
//hong : history(영업1팀, 기획실,전산)

db.exam.updateMany({id:"song"},{$set:{"history":["영업1팀","총무","기획실"]}})
db.exam.updateMany({id:"jang"},{$set:{"history":["전략팀","총무","전산"]}})
db.exam.updateMany({id:"hong"},{$set:{"history":["영업1팀","기획실","전산"]}})

//2. song의 document history에 자금부를 추가하세요
db.exam.updateMany({id:"song"},{$push:{"history":"자금부"}})

//3. jang의 document의 history에 마지막 데이터를 제거하세요
db.exam.updateMany({id:"jang"},{$pop:{"history":1}})

//4. servlet데이터가 100점인 모든 document에 bonus를 3000을 추가하세요. 기존데이터가 존재하면 증가되도록 구현하세요
db.exam.updateMany({servlet:100},{$inc:{bonus:3000}})

//5. song의 lang.ms에 "visual basic","asp",".net"을 한꺼번에 추가하세요 
db.exam.updateMany({id:"song"},{$push:{"lang.ms":{$each:["visual basic","asp",".net"]}}})

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글