■ 7. mongo db
->우분투 os 에서 수행
리눅스설치파일->우분투페도라->ios파일 우분투를 저장소로 지정
ip addr
터미널창 키면 3번째 단락에 아이피주소 뜨는데 기억해둘 것
new terminal
sudo apt-get install ssh
password: oracle
Y
ip addr
inet 주소 입력 (brd 빼고)
putty 키고 위 아이피주소 입력하고 접속 (102 였음)
■ Mongo DB 설치 (우분투 os)
1.설치 참고 블로그
https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-16-04
2. 우분투 다운로드 사이트
https://www.mongodb.com/download-center/community?jmp=homepage
우분투 16.04 설치
3. Mongo DB 저장소 추가
MongoDB Pulbic GPG Key 등록
$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
다음으로 Mongo DB 저장소 세부 사항을 추가 apt 해야
패키지를 어디에서 다운로드 해야 하는지 알 수 있다.
4. MongoDB 에 대한 목록 파일을 작성하려면 다음 명령을 실행해야 한다.
$echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
저장소 세부정보를 추가 한 후 패키지 목록을 업데이트 해야 한다.
5. Mongo DB 설치 및 확인
$sudo apt-get install -y mongodb-org
이 명령은 Mongo DB 서버에 대한 유용한 관리 도구와 함께 최신 stable 버전의
Mongo DB를 포함하는 여러 패키지를 설치합니다.
6. MongoDB 를 시작 systemctl 한다.
$sudo systemctl status mongod
7. 마지막 단계: 시스템이 시작될 때 자동으로 Mongo DB 시작하기
$sudo systemctl enable mongod
8. 제대로 안되서 밀고 다시 설치 하고 싶다면
$ sudo service mongod stop
$ sudo apt-get purge monghdb-ort*
$ sudo rm -r /var/log/mongodb
$ sudo rm -r /var/lib/mongodb
문제81. mongodb 에 emp 테이블을 생성하시오 !
# emp 테이블 생성
db.emp.save({empno:7499,ename:"SMITH",job:"CLERK",mgr:7902,hiredate:"1980-12-17",sal:1800,comm:800,deptno:20})
db.emp.save({empno:7369,ename:"ALLEN",job:"SALESMAN",mgr:7698,hiredate:"1981-02-20",sal:1600,comm:800,deptno:20})
db.emp.save({empno:7521,ename:"WARD",job:"SALESMAN",mgr:7698,hiredate:"1981-02-22",sal:1250,comm:500,deptno:30})
db.emp.save({empno:7566,ename:"JONES",job:"MANAGER",mgr:7839, hiredate:"1981-04-02",sal:2975,comm:0,dpetno:20})
db.emp.save({empno:7654,ename:"MARTIN",job:"SALESMAN",mgr:7698,hiredate:"1981-09-28",sal:1250,comm:1400,dpetno:30})
db.emp.save({empno:7698,ename:"BLAKE",job:"MANAGER",mgr:7839,hiredate:"1981-05-01",sal:2850,comm:0,deptno:30})
db.emp.save({empno:7782,ename:"CLARK",job:"MANAGER",mgr:7839,hiredate:"1981-06-09",sal:2450,comm:0,deptno:10})
db.emp.save({empno:7788,ename:"SCOTT",job:"ANALYST",mgr:7566,hiredate:"1987-04-19",sal:3000,comm:0,deptno:20})
db.emp.save({empno:7839,ename:"KING",job:"PRESIDENT",mgr:0,hiredate:"1981-11-17",sal:5000,comm:0,deptno:10})
db.emp.save({empno:7844,ename:"TURNER",job:"SALESMAN",mgr:7698,hiredate:"1981-09-08",sal:1500,comm:0,deptno:30})
db.emp.save({empno:7876,ename:"ADAMS",job:"CLERK",mgr:7788,hiredate:"1987-05-23",sal:1100, comm:0,deptno:20})
db.emp.save({empno:7900,ename:"JAMES",job:"CLERK",mgr:7698,hiredate:"1981-12-03",sal:950,comm:0,deptno:30})
db.emp.save({empno:7902,ename:"FORD",job:"ANALYST",mgr:7566,hiredate:"1981-12-03",sal:3500,comm:0,deptno:20})
db.emp.save({empno:7934,ename:"MILLER",job:"CLERK",mgr:7782,hiredate:"1982-01-23",sal:1300, comm:0,deptno:20})
※ 몽고디비에서 emp 테이블 drop 하고 다시 생성하는 방법
db.emp.drop()
db.emp.save({empno:7499,ename:"SMITH",job:"CLERK",mgr:7902,hiredate:"1980-12-17",sal:1800,comm:800,deptno:20})
db.emp.save({empno:7369,ename:"ALLEN",job:"SALESMAN",mgr:7698,hiredate:"1981-02-20",sal:1600,comm:800,deptno:20})
db.emp.save({empno:7521,ename:"WARD",job:"SALESMAN",mgr:7698,hiredate:"1981-02-22",sal:1250,comm:500,deptno:30})
db.emp.save({empno:7566,ename:"JONES",job:"MANAGER",mgr:7839, hiredate:"1981-04-02",sal:2975,comm:0,deptno:20})
db.emp.save({empno:7654,ename:"MARTIN",job:"SALESMAN",mgr:7698,hiredate:"1981-09-28",sal:1250,comm:1400,deptno:30})
db.emp.save({empno:7698,ename:"BLAKE",job:"MANAGER",mgr:7839,hiredate:"1981-05-01",sal:2850,comm:0,deptno:30})
db.emp.save({empno:7782,ename:"CLARK",job:"MANAGER",mgr:7839,hiredate:"1981-06-09",sal:2450,comm:0,deptno:10})
db.emp.save({empno:7788,ename:"SCOTT",job:"ANALYST",mgr:7566,hiredate:"1987-04-19",sal:3000,comm:0,deptno:20})
db.emp.save({empno:7839,ename:"KING",job:"PRESIDENT",mgr:0,hiredate:"1981-11-17",sal:5000,comm:0,deptno:10})
db.emp.save({empno:7844,ename:"TURNER",job:"SALESMAN",mgr:7698,hiredate:"1981-09-08",sal:1500,comm:0,deptno:30})
db.emp.save({empno:7876,ename:"ADAMS",job:"CLERK",mgr:7788,hiredate:"1987-05-23",sal:1100, comm:0,deptno:20})
db.emp.save({empno:7900,ename:"JAMES",job:"CLERK",mgr:7698,hiredate:"1981-12-03",sal:950,comm:0,deptno:30})
db.emp.save({empno:7902,ename:"FORD",job:"ANALYST",mgr:7566,hiredate:"1981-12-03",sal:3500,comm:0,deptno:20})
db.emp.save({empno:7934,ename:"MILLER",job:"CLERK",mgr:7782,hiredate:"1982-01-23",sal:1300, comm:0,deptno:20})
문제82. 아래의 select 문을 mongodb 로 구현하시오 !
SQL> select count(*) from emp;
↓
> db.emp.aggregate([{$group:{_id:null, count:{$sum:1}}}])
문제83. 부서번호가 10번인 사원들의 사원번호, 이름, 월급을 조회하시오
SQL> select deptno, ename, sal
from emp
where deptno==10;
↓
mongodb> db.emp.find( { deptno:{$all:[10]}},
{ _id:0, empno:1, ename:1, sla:1} )
#괄호 ( ) 안에 조건 ={ } , 컬럼 ={ } 주고
0 이면 안뽑겠다, 1이면 뽑겠다 라는 뜻.
id 는 오라클의 rownum 같은 것 이다. 디폴트로 항상 출력된다.
> db.emp.find( { deptno:{$all:[10]}},
... { _id:0, empno:1, ename:1, sla:1} )
{ "empno" : 7782, "ename" : "CLARK" }
{ "empno" : 7839, "ename" : "KING" }
문제84. 월급이 3000 인 사원들의 이름,월급,직업을 출력하시오
> db.emp.find({sal:{$all:[3000]}},
... {_id:0,ename:1,sal:1,job:1})
{ "ename" : "SCOTT", "job" : "ANALYST", "sal" : 3000 }
다른답:
> db.emp.find({sal:{$eq:3000}},
{_id:0,ename:1,sal:1,job:1})
■ mongodb 에서 사용하는 연산자
1. 비교연산자
$eq = 같다
$gt > 크다
$gte >= 크거나 같다
$lt < 작다
$lte <= 작거나 같다
$ne != 같지않다
2. 논리연산자
$and
$or
$not
3. 산술연산자
$add (+)
$subtract (-)
$multiply (*)
$devide (/)
$mod (나머지)
문제85. 월급이 2000 이상인 사원들의 이름,월급,직업을 출력하시오
SQL> select ename, sal, job
from emp
where sal>=2000;
↓
mongo>db.emp.find( {sal:{$gte:2000}}) 라고 쓰면 월급2000 이상 사원모두 출력
{ "_id" : ObjectId("5c2c5f71b32786660a83b479"), "empno" : 7566, "ename" : "JONES", "job" : "MANAGER", "mgr" : 7839, "hiredate" : "1981-04-02", "sal" : 2975, "comm" : 0, "dpetno" : 20 }
{ "_id" : ObjectId("5c2c5f71b32786660a83b47b"), "empno" : 7698, "ename" : "BLAKE", "job" : "MANAGER", "mgr" : 7839, "hiredate" : "1981-05-01", "sal" : 2850, "comm" : 0, "deptno" : 30 }
{ "_id" : ObjectId("5c2c5f71b32786660a83b47c"), "empno" : 7782, "ename" : "CLARK", "job" : "MANAGER", "mgr" : 7839, "hiredate" : "1981-06-09", "sal" : 2450, "comm" : 0, "deptno" : 10 }
{ "_id" : ObjectId("5c2c5f71b32786660a83b47d"), "empno" : 7788, "ename" : "SCOTT", "job" : "ANALYST", "mgr" : 7566, "hiredate" : "1987-04-19", "sal" : 3000, "comm" : 0, "deptno" : 20 }
{ "_id" : ObjectId("5c2c5f71b32786660a83b47e"), "empno" : 7839, "ename" : "KING", "job" : "PRESIDENT", "mgr" : 0, "hiredate" : "1981-11-17", "sal" : 5000, "comm" : 0, "deptno" : 10 }
{ "_id" : ObjectId("5c2c5f71b32786660a83b482"), "empno" : 7902, "ename" : "FORD", "job" : "ANALYST", "mgr" : 7566, "hiredate" : "1981-12-03", "sal" : 3500, "comm" : 0, "deptno" : 20 }
mongo>db.emp.find( {sal :{$gte:2000} },
{_id:0,ename:1,sal:1,job:1} )
{ "ename" : "JONES", "job" : "MANAGER", "sal" : 2975 }
{ "ename" : "BLAKE", "job" : "MANAGER", "sal" : 2850 }
{ "ename" : "CLARK", "job" : "MANAGER", "sal" : 2450 }
{ "ename" : "SCOTT", "job" : "ANALYST", "sal" : 3000 }
{ "ename" : "KING", "job" : "PRESIDENT", "sal" : 5000 }
{ "ename" : "FORD", "job" : "ANALYST", "sal" : 3500 }
문제86. 직업이 SALESMAN 이 아닌 사원들의 이름,직업을 출력하시오
>db.emp.find ( {job:{$ne:'SALESMAN'}}, {_id:0,ename:1,job:1} )
{ "ename" : "SMITH", "job" : "CLERK" }
{ "ename" : "JONES", "job" : "MANAGER" }
{ "ename" : "BLAKE", "job" : "MANAGER" }
{ "ename" : "CLARK", "job" : "MANAGER" }
{ "ename" : "SCOTT", "job" : "ANALYST" }
{ "ename" : "KING", "job" : "PRESIDENT" }
{ "ename" : "ADAMS", "job" : "CLERK" }
{ "ename" : "JAMES", "job" : "CLERK" }
{ "ename" : "FORD", "job" : "ANALYST" }
{ "ename" : "MILLER", "job" : "CLERK" }
문제87. 이름,월급을 출력하는데 월급이 높은 사원부터 출력하시오
db.emp.find( {}, {_id:0,ename:1,sal:1} ).sort( {sal:-1} )
{ "ename" : "KING", "sal" : 5000 }
{ "ename" : "FORD", "sal" : 3500 }
{ "ename" : "SCOTT", "sal" : 3000 }
{ "ename" : "JONES", "sal" : 2975 }
{ "ename" : "BLAKE", "sal" : 2850 }
{ "ename" : "CLARK", "sal" : 2450 }
{ "ename" : "SMITH", "sal" : 1800 }
{ "ename" : "ALLEN", "sal" : 1600 }
{ "ename" : "TURNER", "sal" : 1500 }
{ "ename" : "MILLER", "sal" : 1300 }
{ "enme" : "WARD", "sal" : 1250 }
{ "ename" : "MARTIN", "sal" : 1250 }
{ "ename" : "ADAMS", "sal" : 1100 }
{ "ename" : "JAMES", "sal" : 950 }
**설명: 조건없으니까 빈중괄호 {}
출력값 다 쓰고
괄호 닫고 sort 시키는데 desc 가 -1
※ 정렬
1 : asc
-1: desc
문제88.(오늘의 마지막 문제)
직업이 SALESMAN 인 사원들의 이름,월급,직업을 출력하는데
월급이 낮은 사원부터 출력하시오
db.emp.find( {job : {$eq:'SALESMAN'} },{_id:0,ename:1,sal:1,job:1}).sort( {sal:1} )
{ "ename" : "WARD", "job" : "SALESMAN", "sal" : 1250 }
{ "ename" : "MARTIN", "job" : "SALESMAN", "sal" : 1250 }
{ "ename" : "TURNER", "job" : "SALESMAN", "sal" : 1500 }
{ "ename" : "ALLEN", "job" : "SALESMAN", "sal" : 1600 }
----------------------------------------------------
문제89. 월급이 1000 인 사원들의 이름,월급을 출력하시오
SQL> select ename, sal
from emp
where sal = 1000;
> db.emp.find({ sal:{$eq:1250}},{_id:0,ename:1,sal:1} )
{ "ename" : "WARD", "sal" : 1250 }
{ "ename" : "MARTIN", "sal" : 1250 }
문제90. 월급이 1000 에서 3000 사이인 사원들의 이름,월급을 출력하시오
> db.emp.find ({sal:{$gte:1000, $lte:3000} }, {_id:0,ename:1,sal:1} )
{ "ename" : "SMITH", "sal" : 1800 }
{ "ename" : "ALLEN", "sal" : 1600 }
{ "ename" : "WARD", "sal" : 1250 }
{ "ename" : "JONES", "sal" : 2975 }
{ "ename" : "MARTIN", "sal" : 1250 }
{ "ename" : "BLAKE", "sal" : 2850 }
{ "ename" : "CLARK", "sal" : 2450 }
{ "ename" : "SCOTT", "sal" : 3000 }
{ "ename" : "TURNER", "sal" : 1500 }
{ "ename" : "ADAMS", "sal" : 1100 }
{ "ename" : "MILLER", "sal" : 1300 }
** $and 쓴 방법
db.emp.find ({$and:[{sal:{$gte:1000}},{sal:{$lte:3000}}] }, {_id:0,ename:1,sal:1} )
※ $and 안쓰는게 더 간단하다
문제91. 사원번호가 7788 또는 7902인 사원들의 사원번호,이름,월급을 출력하시오
> db.emp.find({$or:[{empno:{$eq:7788}},{empno:{$eq:7902}}]}, {_id:0,ename:1,sal:1} )
{ "ename" : "SCOTT", "sal" : 3000 }
{ "ename" : "FORD", "sal" : 3500 }
좀더 간결한 방법:
>db.emp.find({$or:[{empno:7788},{empno:7902}]}, {_id:0,ename:1,sal:1} )
문제92. 부서번호를 출력하는데 중복제거해서 출력하시오!
SQL> select distinct deptno
from emp;
db.emp.distinct('deptno')
[ 20, 30, 10 ]
db.emp.distinct('deptno').sort( {deptno:1} )
: distinct 는 출력형태가 list [ ] 인데, sort 는 리스트형식이 안먹히는 듯.
db.emp.find( {job : {$eq:'SALESMAN'} },{_id:0,ename:1,sal:1,job:1}).sort( {sal:1} )
:이건 잘 돌아감
문제93. 사원 테이블 전체건수를 출력하시오
> db.emp.count()
14
문제94. 직업이 SALESMAN 인 사원들의 인원수를 출력하시오
> db.emp.count( {job:{$eq:'SALESMAN'}})
4
문제95. 월급이 3000 이상인 사원들의 인원수를 출력하시오
db.emp.count( {sal:{$gte:3000}})
문제96. 사원 테이블 전체의 최대월급을 출력하시오
> db.emp.find( {}, {_id:0,sal:1}).sort({sal:-1}).limit(1)
{ "sal" : 5000 }
문제97. 직업이 SALESMAN 인 사원들의 최대월급을 출력하시오
> db.emp.find({job:'SALESMAN'},{_id:0,ename:1,sal:1}).sort({sal:-1}).limit(1)
{ "ename" : "ALLEN", "sal" : 1600 }
문제98. 사원테이블의 토탈월급을 출력하시오
db.emp.aggregate( [ {$group:
{_id:null,total:{$sum:'$sal'} } }
] )
{ "_id" : null, "total" : 30525 }
***_id 값 변경하면
db.emp.aggregate( [ {$group:
{_id:0,total:{$sum:'$sal'} } }
] )
{ "_id" : 0, "total" : 30525 }
문제99. 최대월급을 출력하시오!
db.emp.aggregate( [ {$group:
{_id:0,max:{$max:'$sal'} } }
] )
{ "_id" : 0, "max" : 5000 }
문제100. 최소월급을 출력하시오
db.emp.aggregate( [{$group: {_id:null,min:{$min:'$sal'}}} ] )
{ "_id" : null, "min" : 950 }
문제101. 직업이 SALESMAN 인 사원들의 최대월급을 출력하시오
(문제97번과 다르게 aggregate 로 하시오)
db.emp.aggregate( [ {$match:{job:'SALESMAN'} },{$group:{_id:null,max:{$max:'$sal'} } } ] )
{ "_id" : null, "max" : 1600 }
***match 는 group 함수랑 같이 조건달때 써주는 함수다.
문제102. 부서번호가 30번인 사원들의 최대월급을 출력하시오
(find+sort+limit(1) 쓰는 방법,
aggregate 쓰는 방법 2가지 !)
db.emp.find( { deptno:30},{_id:0,deptno:1,ename:1,sal:1}).sort({sal:-1}).limit(1)
db.emp.aggregate( [ {$match:{deptno:30}},{$group:{_id:null,max:{$max:'$sal'}}} ] )
{ "ename" : "BLAKE", "sal" : 2850, "deptno" : 30 }
{ "_id" : null, "max" : 2850 }
***aggregate 는 ename, sal, deptno 같이 여러가지 출력이 안된다(에러!)
문제103. 부서번호, 부서번호별 토탈월급을 출력하시오!
db.emp.aggregate( [ { $group:{_id:'$deptno',total:{$sum:'$sal'} } } ] )
{ "_id" : 10, "total" : 7450 }
{ "_id" : null, "total" : 4225 }
{ "_id" : 30, "total" : 6550 }
{ "_id" : 20, "total" : 12300 }
***이렇게 에러가 나오면 drop, 새로 생성하기!
> db.emp.aggregate( [ { $group:{_id:'$deptno',total:{$sum:'$sal'} } } ] )
{ "_id" : 10, "total" : 7450 }
{ "_id" : 30, "total" : 7800 }
{ "_id" : 20, "total" : 15275 }
문제104. 직업, 직업별 최대월급을 출력하시오!
> db.emp.aggregate( [ { $group:{_id:'$job',max:{$max:'$sal'}}} ] )
{ "_id" : "PRESIDENT", "max" : 5000 }
{ "_id" : "ANALYST", "max" : 3500 }
{ "_id" : "MANAGER", "max" : 2975 }
{ "_id" : "SALESMAN", "max" : 1600 }
{ "_id" : "CLERK", "max" : 1800 }
※ $ 를 붙이고 안붙이고는 위 결과값 처럼 "_id" , "max" 처럼 컬럼명으로 쓰이는
alias 들은 $를 붙이지 않는다(뇌피셜)
문제105. 직업, 직업별 토탈월급을 출력하는데 직업이 SALESMAN 인 사원은 제외하고
출력하시오 !
db.emp.aggregate( [ { $match:{job:{$ne:'SALESMAN'} } }, {$group: {_id:'$job',max:{$max:'$sal'} } } ] )
{ "_id" : "PRESIDENT", "max" : 5000 }
{ "_id" : "ANALYST", "max" : 3500 }
{ "_id" : "MANAGER", "max" : 2975 }
{ "_id" : "CLERK", "max" : 1800 }
※ {$함수 : {컬럼명 : {$함수 : 조건} } }
→조건이 row 값이나 단일값이면 $ 안붙이고
조건이 컬럼명이면 $ 붙여야 한다.
문제106. 직업, 직업별 토탈월급을 출력하는데 직업이 SALESMAN 은 제외하고 출력하고
직업별 토탈월급이 높은것부터 출력하시오
db.emp.aggregate( [ {$match:{job:{$ne:'SALESMAN'} } }, {$group: {_id:'$job',total:{$sum:'$sal'}}},
{$sort:{total:-1} } ] )
{ "_id" : "MANAGER", "total" : 8275 }
{ "_id" : "ANALYST", "total" : 6500 }
{ "_id" : "PRESIDENT", "total" : 5000 }
{ "_id" : "CLERK", "total" : 3850 }
문제107. 직업, 직업별 토탈월급을 출력하는데 직업이 SALESMAN 은 제외하고 출력하고,
직업별 토탈월급이 5000 이상인것만 출력하고
직업별 토탈월급이 높은것부터 출력하시오 !
db.emp.aggregate( { $match : { job : { $ne : 'SALESMAN' } } },
{ $group : { _id : '$job' , total : { $sum : '$sal' } } },
{ $match : { total : { $gte : 6000 } } },
{ $sort : { total : -1 } } )
{ "_id" : "MANAGER", "total" : 8275 }
{ "_id" : "ANALYST", "total" : 6500 }
문제108. 이름의 첫 번째 글자가 A 로 시작하는 사원들의 이름,월급을 출력하시오 !
db.emp.find( { ename: /^A/ }, {_id:0,ename:1,sal:1} )
{ "ename" : "ALLEN", "sal" : 1600 }
{ "ename" : "ADAMS", "sal" : 1100 }
※ 설명:
^ : 시작
$ : 끝
. : 한자리 (점 하나가 한 자리를 나타냄)
ex)
> db.emp.find( { ename: /T.$/ }, {_id:0,ename:1,sal:1} )
{ "ename" : "SMITH", "sal" : 1800 }
{ "ename" : "SCOTT", "sal" : 3000 }
문제109. 이름의 끝글자가 T로 끝나는 사원을 출력하시오
db.emp.find( { ename: /T.$/ }, {_id:0,ename:1,sal:1} )
{ "ename" : "SCOTT", "sal" : 3000 }
문제110.
이름에 두번째 철자가 M인 사원들의 이름,월급을 출력하시오
db.emp.find( {ename:/^.M/},{_id:0,ename:1,sal:1} )
{ "ename" : "SMITH", "sal" : 1800 }
문제111.
이름에 A를 포함하고 있는 사원들의 이름과 월급을 출력하시오
db.emp.find( { ename:/A/}, {_id:0,ename:1,sal:1} )
{ "ename" : "ALLEN", "sal" : 1600 }
{ "ename" : "WARD", "sal" : 1250 }
{ "ename" : "MARTIN", "sal" : 1250 }
{ "ename" : "BLAKE", "sal" : 2850 }
{ "ename" : "CLARK", "sal" : 2450 }
{ "ename" : "ADAMS", "sal" : 1100 }
{ "ename" : "JAMES", "sal" : 950 }
■ mongodb 를 tool 에서 사용하는 방법 (sqlgate 와 같은)
기능이 많은 것 : 스튜디오 3T (30일 try 버젼)
우리는 robo3T 를 받는다.
64비트 설치프로그램
터미널창 뜨면
create
ssh
우분투 ip 주소 192.168.56.101
oracle
password(ssh auth method 에서 선택)
oracle
컨넥트 시키고
왼쪽 test->collections->emp
오른쪽에 아이콘들이 있는데 표형태, 터미널창 형태로 볼 수 있다.
맨상단 검은화면에 코드치고 컨트롤+엔터 하면 코드 돌아간다.
■ mongodb 에서의 조인문장
문제112. dept 테이블을 mongodb 에서 생성하시오
db.dept.save({deptno:10,dname:"ACCOUNTING",loc:"NEW YORK"})
db.dept.save({deptno:20,dname:"RESEARCH",loc:"DALLAS"})
db.dept.save({deptno:30,dname:"SALES",loc:"CHICAGO"})
db.dept.save({deptno:40,dname:"OPERATIONS",loc:"BOSTON"})
지워는거
db.dept.drop()
확인:
db.getCollection('dept').find({})
문제113.
부서위치가 DALLAS 의 부서번호를 출력하시오
db.dept.find( { loc:'DALLAS'},{_id:0,deptno:1} )
20.0
문제114.
이름, 부서위치를 출력하시오
db.emp.aggregate ( [
{ $lookup: { from: 'dept', localField:'deptno', foreignField:'deptno',
as: 'aa' }
},
{$project: {_id:0,ename:1,aa:{loc:1} }
}
] )
{ "ename" : "SMITH", "aa" : [ { "loc" : "DALLAS" } ] }
{ "ename" : "ALLEN", "aa" : [ { "loc" : "DALLAS" } ] }
{ "ename" : "WARD", "aa" : [ { "loc" : "CHICAGO" } ] }
{ "ename" : "JONES", "aa" : [ { "loc" : "DALLAS" } ] }
{ "ename" : "MARTIN", "aa" : [ { "loc" : "CHICAGO" } ] }
{ "ename" : "BLAKE", "aa" : [ { "loc" : "CHICAGO" } ] }
{ "ename" : "CLARK", "aa" : [ { "loc" : "NEW YORK" } ] }
{ "ename" : "SCOTT", "aa" : [ { "loc" : "DALLAS" } ] }
{ "ename" : "KING", "aa" : [ { "loc" : "NEW YORK" } ] }
{ "ename" : "TURNER", "aa" : [ { "loc" : "CHICAGO" } ] }
{ "ename" : "ADAMS", "aa" : [ { "loc" : "DALLAS" } ] }
{ "ename" : "JAMES", "aa" : [ { "loc" : "CHICAGO" } ] }
{ "ename" : "FORD", "aa" : [ { "loc" : "DALLAS" } ] }
※ 안되는 사람들도 있는데, 몽고3 버젼만 돌아가서 그렇다.
버젼 확인
MongoDB shell version: 3.2.22
(mongo 처음 접속할 때 나옴)
문제115.
이름.월급,부서명을 출력하시오 !
db.emp.aggregate ( [
{ $lookup: { from: 'dept', localField:'deptno', foreignField:'deptno',
as: 'aa' }
},
{$project: {_id:0,ename:1,sal:1,aa:{dname:1} }
}
] )
{ "ename" : "SMITH", "sal" : 1800, "aa" : [ { "dname" : "RESEARCH" } ] }
{ "ename" : "ALLEN", "sal" : 1600, "aa" : [ { "dname" : "RESEARCH" } ] }
{ "ename" : "WARD", "sal" : 1250, "aa" : [ { "dname" : "SALES" } ] }
{ "ename" : "JONES", "sal" : 2975, "aa" : [ { "dname" : "RESEARCH" } ] }
{ "ename" : "MARTIN", "sal" : 1250, "aa" : [ { "dname" : "SALES" } ] }
{ "ename" : "BLAKE", "sal" : 2850, "aa" : [ { "dname" : "SALES" } ] }
{ "ename" : "CLARK", "sal" : 2450, "aa" : [ { "dname" : "ACCOUNTING" } ] }
{ "ename" : "SCOTT", "sal" : 3000, "aa" : [ { "dname" : "RESEARCH" } ] }
{ "ename" : "KING", "sal" : 5000, "aa" : [ { "dname" : "ACCOUNTING" } ] }
{ "ename" : "TURNER", "sal" : 1500, "aa" : [ { "dname" : "SALES" } ] }
{ "ename" : "ADAMS", "sal" : 1100, "aa" : [ { "dname" : "RESEARCH" } ] }
{ "ename" : "JAMES", "sal" : 950, "aa" : [ { "dname" : "SALES" } ] }
{ "ename" : "FORD", "sal" : 3500, "aa" : [ { "dname" : "RESEARCH" } ] }
■ Mongodb 에서의 DML 문
1. insert ----->> save
2. update
3. delete ---->> remove
문제116. SCOTT 의 월급을 5600 으로 변경하시오 !
db.emp.update( {ename:'SCOTT'},
{$set:{sal:500} },
{multi: true} )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.emp.find()
ename" : "SCOTT", "job" : "ANALYST", "mgr" : 7566, "hiredate" : "1987-04-19", "sal" : 500
문제117.
월급이 3000 이상인 사원들의 comm 을 7000 으로 수정하시오!
db.emp.update( { sal:{$gte:3000} },
{$set:{comm:7000} },
{multi:true} )
db.emp.find()
문제118.
직업이 ANANLYST 인 사원들을 삭제하시오
db.emp.remove( {job:'ANALYST'} )
문제119.
emp 테이블 전체를 지우시오 (delete 로)
db.emp.remove({})
*** 안에 {} 넣어줘야 함 !!
'hadoop' 카테고리의 다른 글
9. sqoop 설치 , sqoop 으로 오라클, hive 연동 (0) | 2019.01.11 |
---|---|
8. mySQL 설치, 설명 (0) | 2019.01.11 |
6. PIG설치, 설명 (0) | 2019.01.11 |
5. TAJO설치, 설명 (0) | 2019.01.11 |
4. HIVE (0) | 2019.01.11 |