-
mongodb updateNoSQL/MongoDB 2012. 10. 19. 18:39
안녕하세요. 이스트럭(강동운) 입니다.
오늘은 mongodb update에 대해서 알아볼까 합니다.
일반적으로 아시는 update에는 조건과 변경값만 있는지 아십니다.
idx가 1번인 값의 name을 eastluck으로 변경하라! 라고 본다면.. 아래 쿼리와 같을 수 있겠죠~!
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라고 얘기 드렸습니다.
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" }
재미있죠? ^^; 이런 예제도 있습니다!
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로 넣으면 입력이 안되겠죠!
이제 마지막 연산자를 살펴보죠! 마지막 연산자는 멀티라인 조건입니다. 기본값으로 주면?
// 테스트했던 컬렉션 삭제 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" }
한 행만 수정된 걸 볼 수 있습니다. 따라서.. 이런 경우는 이렇게 하셔야 됩니다.
// 테스트했던 컬렉션 삭제 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" }
update의 3번째 인자와 4번쨰 인자를 효과적으로 사용합시다 ^^
감사합니다. ^^
참고 URL: http://www.mongodb.org/display/DOCS/Updating
작성일: 2012-10-19
작성자: 이스트럭(강동운)