[MongoDB] NoSql 몽고디비(MongoDB) (2) 사용법

* 오늘은 몽고디비 사용법을 알아봅시다 ~

 

1. 데이터 삽입하기(insert) & 삽입한 데이터 조회하기

 

db.data

db = 리스트를 만들겠다는 의미 입나다.(내장 함수)

해석 : 리스트를 만들겠다(db.) 이름은 "data"(data.) 로 만들겠다.

       * 만약 data라는 이름이 이미 존재한다면 새로 생성하지 않습니다

 

.insert(객체,객체...) = 데이터 삽입 함수 파라미터로 json 형태(=Map형태)로 삽입하고자하는 객체들을 , (콤마)로 구분하여 추가합니다.

* JSon 또는 Map 형태란 : { } <<하나의 객체를 나타내는 중괄호 안에  {"키":"데이터"} 형태를 말합니다

   해당 키 값으로 데이터를 찾아갈 수 있습니다.

.find() = 이름이 data인 리스트의 모든 데이터를 출력합니다.

 

.find({조건식},{출력하고 싶은 거})

ex)

db.data.find({},{price:1}) : price만 보여주겠다

db.data.find({},{price:0}) : price제외하고 다보여주겠다.

db.data.find({},{_id:0},{price:1}) : id는 안보여주고 price만 보여주겠다.

db.data.find({fruite:/^ba/},{price:1}) : ba로 시작하는 price 값만 보여주겠다.

* ㅜㅜ설명이 미숙해서 죄송해용~

 

2. 데이터 삽입하기(save) & insert와 save의 차이점

save도 insert와 마찬가지로 데이터를 삽입합니다.

방법 또한 함수 이름만 틀리지 나머지는 같습니다.

 

* save와 insert의 차이점

 

일단 결론 부터 말하면,

insert는 같은 id 즉 "_id" : ObjectId("565c50f754ada8011194e6c0") << _id 값과 같은 id의 데이터를 삽입하면 에러가나지만

save는 같은 id의 데이터를 삽입하면 에러가나지 않고 이전 데이터는 없애고 새로 데이터를 갱신합니다.

   * 이미 해당 아이디의 데이터가 존재하면 insert로 데이터를 삽입시 duplicate key error(중복 키 에러) 발생

   * save로 삽입 시 정상삽입이 됩니다.

 

 

3. 데이터의 삭제

Ødb.users.remove() : 다삭제

Ødb.users.remove({id:"user01"}) : id가 user01인 데이터 삭제

 

4. 데이터의 갱신

갱신은 update() 메서드로 수행하며 2개의 매개변수가 필요하며 1번째 매개변수는 조건이고 2번째 매개변수는 변경식

Ødb.users.update({id:"root"},{$set:{password:"system"}}) : id가 root 패스워드 변경
Ødb.users.update({id:"root"},{$set:{address:"서울"}})​ : id가 root인 주소 변경

* save & update 차이점

save는 이전 데이터를 지우고 새로 데이터를 삽입하는 것이고 

​update는 이전 데이터를 냅두고 변경하고 싶은 데이터만 선택해서 set하는 것이다.

 

5. 컬렉션 삭제

Ødb.컬렉션이름.drop()

 

6.컬럼 삭제

Ødb.users.update({id:"root"},{$unset:{address:"서울"}})

 

정규식

정규식 (Reqular Expression)
->문자열 패턴을 표현하기 위한 식

->정규식 만들기 /패턴/한정자

 

.find(정규식)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

데이터를 검색하는 메소드인 find의 매개변수에 정규식 조건에 따라서 원하는 데이터를 츄릅츄릅 뽑아 낼 수 있습니다.

*정규식의 시작과 끝은 "/" (슬러시)

조건식을 알아봅시다.

 

한정자
 -> i 대소문자 구분 안함
 -> g 모든 영역에서 찾음
 -> m 여러 줄에서 찾음
ex)
db.users.find({id:/user/}) : user가 포함된
db.users.find({id:/User/}) : User가 포함된 // 이때 user는 못찾습니다

- 마지막 "/" 뒤에 한정자를 넣어주면
db.users.find({id:/User/i}) : 대소문자 구분하지 않음 user,User둘다 찾음

--------------
/xx/ : xx가 포함된
/^xx/ : xx로 시작하는
/xx$/ : xx로 끝나는
ex)
db.users.find({id:/^user/}) : user로 시작하는
db.users.find({id:/01$/}) : 01로 끝나는
--------------
* : 앞에 나오는 문자 0번이상
+ : 1번 이상
? : 0또는 1번
| : or

ex)
db.users.find({id:/ro+/}) : r다음에 o가 1번이상 나와야 합니다 ~
db.users.find({id:/ro?/}) : r다음에 o가 0또는 1번 나와야 합니다 ~
db.users.find({id:/ro*/}) : r다음에 o가 0번이상 나와야 합니다 // 그냥 전부나오네...
db.users.find({id:/root|user/}) : root또는 user가 포함된
// 위에는 하나의 문자밖에 검사하지 못합니다
-----------------------
// 아래는 x다음에 문자열 검사가 가능합니다

x(?=y) : x다음에 y가 오는 // 이놈은 왜만들엇지?
x(?!y) : x다음에 y가 안오는 // 이놈은 좋지만..

ex)
db.users.find({id:/r(?=oo)/}) : r다음에 oo가 나오는
= db.users.find({id:/roo/})?? 똑같은거같지요?
db.users.find({id:/r(?!oo)/}) : r다음에 oo가 안나오는

-------------------

{숫자} : 숫자 이상 반복되는
{숫자1, 숫자2} : 숫자1이상 숫자2만큼 반복되는

ex)
db.users.find({id:/o{2}/}) : o가 2개이상 붙은 것 2이상 o가 2개연속나오면됨
db.users.find({id:/o{2,3}/}) : 2~3개가 넘으면. 2개 이상부터 3개이상 나오는 것. o가 1개~2개 연속

-----------------
[나열] ; 나열된 것 중에서 하나
[^나열] : 나열된 것 중이 아닌
[a-z] : a~z까지

ex)
db.users.find({id:/^[a-z]/}) : 알파벳 소문자로 시작하는.

​db.users.find({id:/^[a-z,A-Z]/}) 알파벳 대문자 또는 소문자로 시작하는

​db.users.find({id:/^[a-z,A-Z,가-힣]/}) : 알파벳 대문자 또는 소문자 또는 한글로 시작하는 

db.users.find({id:/^[가-깋]/}) 한글로 시작하는

 

* 자바의 경우 'ㄱ'로 시작하는, 'ㄴ'로 시작하는 등의 한글유효성검사 할때 아래 조건을 사용하면 됩니다

if(>=가 && <나) : ㄱ으로 시작하는 것

​else if(<다) : ㄴ으로 시작하는 것

 

[abcd] : a,b,c,d중에 하나 //or랑 비슷하지만 or는 문자열단위, 요놈은 문자단위
핸드폰 번호 체크할 때 사용
* 01[016789] 010,011,016.. 요런거?

---------------


\d : 숫자
\D : 숫자가 아닌
\w : 문자열
\W : 문자열이 아닌

 

ex) 이메일 유효성 검사원리
/\w@\w.\w/

문자열이나오고 @골뱅이 나온후 다시 문자열나오고 .점 나오고 다시 문자열나오면 이메일~

 

---------
대문자 A-Z : 65 ~90
소문자 a-z : 97~122


db.users.find({},{id:1}).sort({id:1}) : id의 오름차순
db.users.find({},{id:1}).sort({id:-1}) : id의 내림차순
db.users.find({},{id:1}).sort({id:-1}).limit(3) : 3개만 나옵니다
db.users.find({},{id:1}).sort({id:-1}).skip(3) : 3개이후 것 나옵니다.
db.users.find({},{id:1}).sort({id:-1}).skip(3).limit(3) :아이고... 복잡하다.순서는 상관없음

*하지만

100MB안되면 sort를 먼저하고
100MB넘어가면 순서대로입니다.

sort는 여러개 사용가능 기준은 첫번째, sort는 객체 형태로 사용하고 나머지는 숫자만 입력합니다
null은 오름차순 내림차순에 따라서 다르게 적용됩니다.
오름차순일때에는 맨앞으로
내림차순일때에는 만뒤로.? 
db.users.find({},{id:1}).sort({id:1}) : 널이 맨 앞으로
db.users.find({},{id:1}).sort({id:-1}) : 널이 맨 뒤로


데이터 검색

sort된 100개의 데이터를 10개씩 출력하고 싶다
db.users.find(),limit(10)
db.users.find().skip(10).limit(10);
db.users.find().skip(20).limit(10);...
점점 느려집니다..
이때
var cursor = db.users.find() // foreach의 원리와 같습니다
cursor.next() : 다음데이터
cursor.hasnext() : 다음데이터 있는지 검사하고 가져옴

 

커서 : 컬렉션내의 데이터 위치를 가리키는 포인터 프로그래밍 언어에서는 Iterator(반복자)
 라고 합니다. 자료구조에 상관없이 다음 데이터롤 이동할 수 있도록 만들어진 포인터 입니다.
 데이터를 순차적으로 모두 접근하고자 할떄 주로 사용합니다/
 자바에서는 이전에는 Enumerator라고 했습니다..
 데이터베이스에서는 Cursor라고 하고, 프로그램에서는 반복자라고 부릅니다.

 

save & update 차이점

save는 지우고 다시 쓰는 것이고
update는 필요한 것만 set하는 것입니다

db.users.update({id:"root"},{$set:{password:"system"}})
 

 

기타 명령어들 정리(2016.01.11)

.- 데이터베이스 삭제

1) 데이터베이스 접속 : use 데이터베이스

2) 데이터베이스 삭제 : db.dropDatabase();

 

- 컬렉션 이름 수정

: db.기존에있는컬렉션이름.renameCollection("새로운 컬렉션이름");

 

- 컬렉션 목록 조회

: show collections;

 

* mongoDB 튜토리얼

http://www.tutorialspoint.com/mongodb/mongodb_covered_queries.htm

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86287
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78744
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95486
144 Flume #2-2 간단한 사용예제 졸리운_곰 2016.05.29 1382
143 Flume #2-1 간단한 사용예제 졸리운_곰 2016.05.29 1438
142 Flume #1 소개 졸리운_곰 2016.05.29 1581
141 [Flume] Flume 설치부터 예제까지... 졸리운_곰 2016.05.29 1063
140 Running Apache Kafka on Windows without Cygwin file 졸리운_곰 2016.05.28 1644
139 Setting Up and Running Apache Kafka on Windows OS file 졸리운_곰 2016.05.28 1858
138 Apache Kafka 졸리운_곰 2016.05.28 1632
137 실시간 처리를 위한 분산 메시징 시스템 카프카(Kafka) file 졸리운_곰 2016.05.28 1880
136 Apache Kafka] 5. Zookeeper 트리 분석 2 졸리운_곰 2016.05.28 1385
135 Apache Kafka] 4. 모니터링하기 file 졸리운_곰 2016.05.28 1466
134 [Apache Kafka] 3. Producer/Consumer 구현하기 졸리운_곰 2016.05.28 1378
133 [apche kafka] Zookeeper 클러스터 구축 file 졸리운_곰 2016.05.28 1460
132 Kafka의 기본 구성 요소와 동작 file 졸리운_곰 2016.05.28 1939
131 R의설치및기본사용법.pdf file 졸리운_곰 2016.05.10 2015
130 7월-4.오픈소스 통계분석 R의 이해.pdf file 졸리운_곰 2016.05.10 1183
129 R Data Analysis Examples: Logit Regression file 졸리운_곰 2016.05.10 1042
128 [MongoDB] 설치후 사용하기 (1) 졸리운_곰 2016.05.10 1475
127 MongoDB from DBguide.net file 졸리운_곰 2016.05.10 1253
126 MongoDB를 쓰면서 알게 된 것들 file 졸리운_곰 2016.05.10 2025
» [MongoDB] NoSql 몽고디비(MongoDB) (2) 사용법 file 졸리운_곰 2016.05.10 928
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED