2012/10/19 18:39
NoSQL/MongoDB
안녕하세요. 이스트럭(강동운) 입니다.
오늘은 mongodb update에 대해서 알아볼까 합니다.
일반적으로 아시는 update에는 조건과 변경값만 있는지 아십니다.
idx가 1번인 값의 name을 eastluck으로 변경하라! 라고 본다면.. 아래 쿼리와 같을 수 있겠죠~!
1 | db.test.update({ "idx" :1}, {$set: { "name" : "eastluck" }}); |
사실 update는 인자값이 두개가 아니라 원래는 총 4개가 있습니다.
db.test.update({조건}, {변경값}, true|false, true| false)
1번인자: 조건
2번인자: 변경조건
3번인자: upsert (upsert란? 있으면 업데이트 없으면 insert 하라는 것입니다, 기본값 false)
4번인자: 멀티라인 조건여부(기본값 false)
1,2번은 우선 설명을 드렸고!
3번째 인자를 살펴보면... 있으면 업데이트.. 없으면 insert라고 얘기 드렸습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | use test db.test.drop(); db.test.insert({ "idx" : 1}) db.test.find(); -- //입력 결과 확인 { "_id" : ObjectId( "50811cd4150da7bcd1e92041" ), "idx" : 1 } -- //업데이트를 치면(upsert를 true를 줬으나 데이터가 있기 때문에 update) db.test.update({ "idx" :1}, {$set : { "name" : "eastluck" }}, true ); db.test.find(); -- //수정 결과화면 { "_id" : ObjectId( "50811cd4150da7bcd1e92041" ), "idx" : 1, "name" : "eastluck" } -- //수정이 된걸 보실 수 있죠! 이제 없는걸 수정해보죠~! db.test.update({ "idx" :100}, {$set : { "name" : "eastluck" }}, true ); db.test.find(); -- //upsert 후 결과 화면(새로 추가된걸 보실 수 있습니다.) { "_id" : ObjectId( "50811cd4150da7bcd1e92041" ), "idx" : 1, "name" : "eastluck" } { "_id" : ObjectId( "50811d3d4b6b41657f10bc49" ), "idx" : 100, "name" : "eastluck" } |
재미있죠? ^^; 이런 예제도 있습니다!
1 2 3 4 5 6 | db.test.update({ "count" :100}, {$inc : { "count" :3}}, true ); db.test.find(); -- //결과화면 { "_id" : ObjectId( "50811cd4150da7bcd1e92041" ), "idx" : 1, "name" : "eastluck" } { "_id" : ObjectId( "50811d3d4b6b41657f10bc49" ), "idx" : 100, "name" : "eastluck" } { "_id" : ObjectId( "50811e1c4b6b41657f10bc4a" ), "count" : 103 } |
count가 100이라는 값이 없는데.. 거기다 3을 더하니.. 103이 입력이 되는 것입니다~^^ 물론 3번째 인자를 false로 넣으면 입력이 안되겠죠!
이제 마지막 연산자를 살펴보죠! 마지막 연산자는 멀티라인 조건입니다. 기본값으로 주면?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <p> // 테스트했던 컬렉션 삭제 db.test.drop() // idx:가 1인 3개행 insert db.test.insert({ "idx" : 1}) db.test.insert({ "idx" : 1}) db.test.insert({ "idx" : 1}) // update(멀티라인 true); db.test.update({ "idx" :1}, {$set: { "name" : "eastluck" }}); db.test.find() //결과 { "_id" : ObjectId( "50811eca150da7bcd1e92043" ), "idx" : 1 } { "_id" : ObjectId( "50811eca150da7bcd1e92044" ), "idx" : 1 } { "_id" : ObjectId( "50811eca150da7bcd1e92042" ), "idx" : 1, "name" : "eastluck" } </p> |
한 행만 수정된 걸 볼 수 있습니다. 따라서.. 이런 경우는 이렇게 하셔야 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <p> // 테스트했던 컬렉션 삭제 db.test.drop() // idx:가 1인 3개행 insert db.test.insert({ "idx" : 1}) db.test.insert({ "idx" : 1}) db.test.insert({ "idx" : 1}) // update(멀티라인 false); db.test.update({ "idx" :1}, {$set: { "name" : "eastluck" }}, false , true ); db.test.find() //결과 { "_id" : ObjectId( "50811f48150da7bcd1e92045" ), "idx" : 1, "name" : "eastluck" } { "_id" : ObjectId( "50811f48150da7bcd1e92046" ), "idx" : 1, "name" : "eastluck" } { "_id" : ObjectId( "50811f48150da7bcd1e92047" ), "idx" : 1, "name" : "eastluck" } </p> |
update의 3번째 인자와 4번쨰 인자를 효과적으로 사용합시다 ^^
감사합니다. ^^
참고 URL: http://www.mongodb.org/display/DOCS/Updating
'IT > Database' 카테고리의 다른 글
[mongodb] $text Indexes 설정하기 (0) | 2014.09.21 |
---|---|
[mongodb] shell에서 find할 때 pretty() 기능 사용 (출력 이쁘게 나옴) (0) | 2014.09.18 |
[mongodb] Index 설정, 확인 (0) | 2014.08.19 |
ubuntu에서 mongodb와 php 연동 (0) | 2014.08.11 |
mongoDB - java 코드에서 insert 명령 수행해보기 (0) | 2014.08.10 |