본문 바로가기

hadoop

7. mongo db 설치, 설명

728x90
반응형

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 같은)

https://www.robomongo.org/

 

기능이 많은 : 스튜디오 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({})

*** 안에 {} 넣어줘야 !!


728x90
반응형

'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