개발관련/MongoDB 2015. 10. 30. 14:05

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


posted by 제스트
: