'mongo'에 해당되는 글 14건
- 2015.11.17 :: mongoDB crud(1)
- 2015.10.30 :: mongodb 의 update, delete
- 2015.10.30 :: mongDB create table 및 색인 생성
- 2015.10.30 :: Mongo 단일 서버 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 | use test db.crudtest.insert( { "idx" : 1, "name" : "aaa", "id" : "aaa", "type" : { "test1" :"test1", "test2" :"test2" } } ); | cs |
몽고 db는 내부에 js로 동작(?)하는 듯한 느낌이다.
먼저 rdb 처럼 어떤 db를 사용할지를 선택한다. rdb처럼 먼저 스키마를 생성하고 이런짓은 안하고 없으면 만들고 있으면 그냥 가져다 쓴다. 머 여타 nosql도 마찬가지지만.
use test를 하면 (여기서 ; 세미콜론을 붙으면 안되더라구요 =_=;) db라는 객체에 저장이 되는듯하다.
이후 db.(콜렉션이름).insert 후 저장할 값을 json형태로 저장하면 된다.
콜렉션은 document 기반의 table을 뜻한다. 머 elasticsearch나 solr, lucene등 document기반이다.
insert형식은 자유롭다. object 를 기본으로 하며, 각 키값(field) : value 여기서 value는 다시 object또는 array가 올수 있다.
1 2 3 4 5 6 7 8 9 | db.crudtest.insert( { "idx" : 3, "name" : "gno", "id" : "gno" } ) | cs |
다음은 update문이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //update db.crudtest.update( //where { "name" :"ryu" }, { //set $set:{"name":"gun-ho"} , //add $set: { "language": ["java","js","angular"] }, //field delete $unset : { "id" : 1 } } ) | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | db.crudtest.update( { "name" :"gun-ho" }, { $push : { "language" : "c++" } } ); db.crudtest.update( { "name" :"gun-ho" }, { $push : { "language" : { $each : ["c","python"] } } } ); | cs |
1 2 | db.crudtest.remove() | cs |
lucene 과 마찬가지로 몽고 디비 역시 update는 미존재 한다. 그러나 api 는 지원 고로 remove후 다시 쓴다는 개념이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //update db.userCollection.update( { "user": "zest133" }, { "user" : "gno", "name" :"gno", "phone" : "111-1111-1111", "idx" : 1 } } //select all db.userCollection.find() | cs |
위에 코드와 같이 첫번째 object는 set을 의미 , 두번째 object는 where절 쯤 (?) 으로 생각.
쿼리를 날리고 결과를 확인하면 기존의 row가 두번재 object 형태로 변경된다. 이때, 이상한 점이 발견될 듯. update가 아니라 걍 delete 후 insert한 결과 형태로 변경된다.
그럼 변경하고 싶은 컬럼만 바꾸고 싶다면? 다음과 같이 하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //update db.userCollection.update( { "user": "gno" }, { $set :{ "user" : "gno", "name" :"gno", "phone" : "111-1111-1111", "idx" : 1 } } ) //select all db.userCollection.find() | cs |
두번째 object 에 $set이라는 내장 변수(?)를 써서 쿼리를 던지면 rdb의 update처럼 변경된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //$inc = plus, minus //$mul = mutiply, divide // db.userCollection.update( { "user": "gno" }, { $mul :{ "idx" : 1/2 } } ) | cs |
또, 숫자를 변경하고 싶다면, $mul을 사용해서 사용.
1 2 3 4 5 6 7 8 9 10 11 | db.userCollection.update( { "user": "gno" }, { $unset :{ "phone" : 1 } } ) | cs |
특정 컬럼을 제거 하고 싶다면 $unset을 해주고 컬럼 : 1 을 해준다. '1'은 true라는 개념인듯 하다.
1 2 3 4 5 6 7 8 9 10 | db.userCollection.update( { "user": "gno" }, { $set :{ "family" : ['mom','bro','sis'] } } ) | cs |
배열 형태로 바꾸거나 추가 할 컬럼은 위와 같이 사용하면된다.
삭제시 remove 라는 api를 이용해 삭제
1 2 3 4 5 6 | //delete db.userCollection.remove( { "user":"gno" } ) | cs |
몽고 db는 기본적으로 json 구조를 쓰며 js와 매우 흡사한 형태(?)로 query 를 날린다.
내부 api를 이용하여 만드는 구조인듯 보인다.
머 몽고 db역시 document 구조라 lucene과 비슷한 형태
Collection은 table, document 는 일종의 row , column은 field로 칭한다.
다음과 같이 쿼리를 날리면 특정 db를 사용하게 된다. 만약 db가 없으면 생성하게 된다.
1 2 | use testDB | cs |
insert 시 db.사용할 컬렉션.insert() 를 하면 row가 생성된다. 이때, 컬렉션이 존재 하지 않으면 생성 하면서 저장하게 된다.
type은 string, date, double 를 지원한듯 보인다.
1 2 3 4 5 6 7 8 9 10 11 | //insert query db.userCollection.insert( { "user":"zest133", "pwd" :"zest133", "name" :"zest133", "email": "zest133@test.com", "date" : new Date() } ) | cs |
색인 컬럼은 다음과 같이 설정.
1 2 3 4 5 6 7 | //insert index db.userCollection.ensureIndex( { "user" : 1 } ) | cs |
배열 색인은 다음과 같이 설정.
1 2 3 4 5 6 | //create array index db.userCollection.createIndex( { "family" : 1 } ) | cs |
createIndex를 사용하여, 특정 json array 컬럼 :1 을 하면된다. 재미난 점은 배열안에 값들이 내부적으로 색인이 된다.
압축 해제하고 서버 실행하면 끝이다.
서버 실행할때 커맨드 라인으로 옵션을 입력하거나 미리 설정파일을 만들어 놓고 사용 할 수 있다.
Mongo 설정 파일 yml 구조를 사용.
tab 없이 스페이스로만 영역을 설정. 머 이런것들 어려우니 작업후 yaml validator로 검증하는게 빠르다.
단일 서버 실행용.
linux 특정 위치에 특정 설정 파일을 생성.
ex) vi mongo.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #yml 파일이 존재 하지 않으면 /var/local/mongdb/data 에 data를 저장. (경로도 마찬가지로 없으면 default 경로에 저장.) #log역시 설정 정보가 없으면 /var/local/mongdb/logs/log.log에 저장. #net - network 설정#하위 구조로 bindIp와 port를 설정한다. #bindIP는 mongoDB 자신의 ip를 설정. #port는 mongDB 의 port를 설정. net: bindIp: "192.168.0.70" port: 35001 #processManagement - 실행 옵션. #fork 는 백그라운드 옵션. processManagement: fork: true #storage - data 저장 경로를 설정. #dbpath - data를 저장할 실제 경로. #journal - data를 쓰기 전 , data write query를 파일에 저장하는 옵션. (일종의 검증, 복구를 위한 작업인듯...) # enabled - journal 을 쓸지 말지의 설정. storage: dbPath: /root/mongo/data/repl1 journal: enabled: true #destination: file, syslog 2가지 옵션 사용 가능 #file로 선언하면 path 옵션을 필수로 넣어서 경로를 직접 설정 #syslog로 선언하면 경로 설정 없이 디폴트 로그파일에 저장 ##verbosity: 로그 기록 레벨 # default : 0 # 0 ~ 5 숫자 값으로 레벨 구분 # 0 : all # 1 : debug, # 2: information # 3: warning # 4: errorm # 5: fatalsystem systemLog: verbosity: 1 destination: file logAppend: true path: /root/mongo/log/repl_log1.log | cs |
마지막으로 실행해보자.
./bin/mongd -f mongo.yml