본문 바로가기
국비교육

MongoDB 5일차

by Diligejy 2019. 4. 19.

1. DB작업

create database testdb; / use testdb;

show databases; show dbs

drop database testdb; / db.dropDatabase

 

2. 컬렉션 작업

create table product(); //db.createCollection("product");

show tables; / show collections;

select * from tab; 

                         / db.test.remove({}), db.test.drop()

 

3. 문서 조작(삽입) insert / save

    db.test.insert({"name" : "mongo"});

    db.test.insert){"string": "abc", "array" : ["a" , "b", "c"]});

 

4. 문서 작업 (선택)

    db.test.find();

    db.test.find({"string" : "abc"});

 

    ⓐ 변수 값 대입

    data = {"string":"abc", "array":["a", "b", "c"]};

    db.test.insert(data);

 

    ⓑ

    cond = {"string":"abcd"};

    db.test.find(cond);

 

    ⓒ JS 문장으로 처리

    for (var i=1; i<=5; i++) db.test02.insert({x:1, y:i});     

   

    ⓓ Json

    var r = db.test02.find()

    while(r.hasNext()) printjson(r.next())

 

    ⓔ 배열의 객체

     db.test03.insert({"key01":"mongo", "array01":["sun", "mon", "tue"]})

     var doc = db.test03.find()

     printjson(doc[0]["key01"]);

     printjson(doc[0]["array01"][2]);    

5. 문서 작업(업데이트)

   update : <boolean> : true일 경우 조건이 일치하는 데이터가 없는 경우 

                                새로운 데이터가 추가된다.

   multi : <boolean> : true일 경우 조건이 일치하는 데이터 모두 변경

 

 

6. 문서 작업(삭제)

    delete from emp where name = 'abc'; / db.emp.remove({name : 'abc'})

 

7. 배열 연산자

    db.my.insert({name : "성민", friend : ["윤수", "창수", "길동"]})

    db.my.insert({name : "우빈"})

    db.my.insert({name:"나래", friend : ["영준", "승룡", "덕현"]})

    db.my.insert({name : "윤기"})

    db.my.insert({name : "국현", friend : ["진영", "재찬", "상준"]})

 

입력한 뒤 

 

    ⓐ $addToSet : 기존 배열객체 해당 값이 없을 때만 추가한다.

    ⓑ $pop : 배열의 첫 번째 or 마지막 요소를 제거한다 (1,-1)

    ⓒ $pushAll : 배열에서 여러개의 요소를 제거한다.

    ⓓ $pull : 조건에 맞는 요소를 가져와서 제거한다.

    ⓔ $push : 배열에 요소를 추가한다. 필드가 없으면 오류가 발생

    ⓕ $each : 반복값을 지정하거나 탐색할 때 사용한다.

    ⓖ $pullAll : 여러 개 제거

 

   1) 나래 친구 추가하자. 낭경, 다슬 

     db.my.update({name : "나래"}, {$push : {friend : {$each : ["낭경", "다슬"]}}});

 

   2) 윤기 친구를 낭경, 다슬도 주자.

     db.my.update({name : "윤기"}, {$push : {friend : {$each : ["낭경", "다슬"]}}});

 

    3) 윤기 친구 중 다슬을 제거해보자.

    db.my.update({name :"윤기"}, {$pop : {friend : 1}});

 

    4) 성민의 친구 중 윤수와 길동을 제거하자. 

     db.my.update({name : "성민"}, {$pull : {friend : ["윤수", "길동"]}});

 

    5) 우빈 친구는 국현의 친구를 추가하자.

      db.my.update({name : "성민"}, {$addToSet : {friend : ["진영", "재찬", "상준"]}});

   

    6) 나래의 test 100, 70, 90, 80을 추가하자.

     db.my.update({name : "나래"}, {$push : {test : {$each : [100, 70, 90, 80]}}});

 

    7) 나래의 test 점수 중에 80점 이하를 삭제하자.

     db.my.update({name : "나래"}, {$pull : {test : {$lte : 80} }}); 

     Number

     Number()

     NumberInt()

 

     8) 나래의 test 점수를 100, 95, 30을 추가하되 정수형 32bit로 추가하자.

     db.my.update({name : "나래"}, {$push : {test : {$each : [NumberInt(100), NumberInt(95), NumberInt(30)] } }});

 

8. 

   20여개의 자료형을 기준으로 설정된 bson에 제공된 기준으로 값들을 바이너리로 매핑해서 저장한다.

    {키 : 값} -> Object -> 바이너리(bson) -> 저장  

   저장된 값을 자료형 확인 $type

   (JS의 자료형과 MongoDB의 자료형은 다르다.)

  

   1) 외부의 파일을 로드 -> .json -> js 자료형 -> mongo에서 연산 -> bson으로 지정한 후 -> 결과 도출

       

    2) 외부에 파일을 다른 형식으로 보낼 때 

         ex) 100, 10.3

         ⓐ 숫자를 관리하는 컬렉션을 만들어 숫자를 입력해보자.

             db.nums.save({num : 100000})

             db.nums.save({num : NumberInt(10000)})

             db.nums.save({num : NumberLong(10000)})

             db.nums.save({num : 98.9})

 

         ⓑ bson의 자료형의 타입을 이용해서 값을 추출해보자.

             - 정수형 int32 자료형을 찾아보자.

            db.nums.find({num : {$type : 16}});

 

              - long형을 찾아보장.

             db.nums.find({num : {$type : 18}});

 

              - 실수형을 찾아보자.

               db.nums.find({num : {$type : 1}});

            

          ⓒ Date객체 생성 후 변수로 만듦.

              일반 변수가 아니라 객체이기 때문에 리턴 후 사라지지 않음

db.nums.save({num : new Date() + 2})

 

 

 

게시물을 출력하기 위해선 9번이 아니라 2번이다! (String)

 

 

    3)  

 

10. 

    1) [sql, csv, tsv, txt]  Mongo + Python (전처리, 분석(마이닝), 차트) => 정형DB서버, Hadoop 적재

    2) Mongo + Spring + html5(js) 

    3) (Mongo + Python) + Spring 

    4) (Mongo + Python) + Spark

 

11.  

Spring + MongoDB는 

https://docs.spring.io/spring-data/mongodb/docs/2.1.6.RELEASE/reference/html/#introduction

 

Spring Data MongoDB - Reference Documentation

As of version 3.6, MongoDB supports the concept of sessions. The use of sessions enables MongoDB’s Causal Consistency model, which guarantees running operations in an order that respects their causal relationships. Those are split into ServerSession instan

docs.spring.io

참고하기!

 

12.

1) pom.xml 설정

 

2) MongoTemplate 만들기!

package com.test;

import java.net.UnknownHostException;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoClientFactoryBean;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.MongoClient;

@Configuration
public class AppConfig {

@Bean
public MongoTemplate mongoTemplate() {
MongoTemplate mongoTemplate = null;
try {
mongoTemplate = new MongoTemplate(new MongoClient("127.0.0.1"), "myScore");
} catch (UnknownHostException e) {
e.printStackTrace();
}
return mongoTemplate;
}
}

 

 

-> spring-data-mongo 1.10.7버전은 try~ catch를 해주어야 한다.

 

3) 컬렉션(엔티티)만들기

package com.test;

import java.util.Date;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;

@Document(collection = "MyUser")
public class MyUser {

@Id
private String id;

@Indexed
private String ic;

private String name;
private int age;

@DateTimeFormat(iso = ISO.DATE)
private Date createDate;

public MyUser() {
}

public MyUser(String id, String name, int age, Date createDate) {
super();
this.id = id;
this.name = name;
this.age = age;
this.createDate = createDate;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getCreateDate() {
return createDate;
}

public void setCreateDate(Date createDate) {
this.createDate = createDate;
}

}

4) 메인 만들기

package com.test;

import java.util.Date;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;

public class MTest {
public static void main(String[] args) {

ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
// @Configuration

MongoOperations mo = (MongoOperations) ac.getBean("mongoTemplate");
MyUser user = new MyUser("111", "홍길동", 30, new Date());
mo.save(user, "MyUser");

 

//  List find(Query(Criteria), Class entityClass)
System.out.println("name이 orange인 레코드를 찾아서 출력");
List res = mo.find(new Query(Criteria.where("name").is("orange")), MyUser.class); .

 

res = mo.findAll(MyUser.class);
for(MyUser r : res) {
System.out.println(r);
}

 

System.out.println("age가 30인 과일을 출력해보장");
res = mo.find(new Query(Criteria.where("age").is(30)), MyUser.class);
for(MyUser r : res) {
System.out.println(r);
}

 

System.out.println("apple를 삭제하자");
mo.remove(new Query(Criteria.where("name").is("apple")), MyUser.class);
        for (MyUser r : res) {
         System.out.println(r);


((AbstractApplicationContext) ac).close();
}
}

 

 

13. Spring에서 Mongo사용하기

    1) MongoTemplate : MongoClient()를 통해서 접속을 한다. db를 생성한다.

    2) MongoOperations : 쿼리를 실행 

    3) 

'국비교육' 카테고리의 다른 글

MongoDB 7일차  (0) 2019.04.23
MongoDB 6일차  (0) 2019.04.22
MongoDB 수업 4일차  (0) 2019.04.18
MongoDB 수업 3일차  (0) 2019.04.17
MongoDB 수업 2일차 - 쿼리  (0) 2019.04.16

댓글