ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mongodb update
    NoSQL/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

    작성자: 이스트럭(강동운)



Designed by Tistory.