Python mongoDB update하기

장보운·2022년 6월 2일
0
post-thumbnail

기억을 위한 나만의 기록장!!

안녕하세요~ 오늘은 mongoDB에 데이터를 update하는 방법에 대해 기록해보려고 합니다!

$set연산자 사용하여 update하기 🥴

연산자란, 주어진 식의 결과 값을 산출하는 것을 연산이라고 하는데, 연산을 위해 사용하는 기호를 연산자 라고 합니다❗

-$set 연산자: 필드가 없을 경우 필드를 추가하거나 필드가 존재할 경우에는 필드 값을 수정하는 역할을 합니다.

저는 id가 2이고 movie가 닥터스트레인지2 였던 데이터 값 중 movie를 닥터스트레인지1로 update해보도록 하겠습니다~

update_item_one, update_item_many

def test_update_movie(id, movie):
     mongo = get_client()
     filter_val = { "id" :  id }
     update_val = { "$set" : {'movie':movie} }
     list = update_item_many(mongo, filter_val, update_val, 'test', 'movie')
     print(f'{list}')

test_update_movie('1', '범죄도시')

log, DB 확인 👀

log 샷 ✔
<pymongo.results.UpdateResult object at 0x00000222364B3FD0>

db 샷 ✔

$push 연산자 사용하여 update하기 🥴

-$push 연산자: $set 연산자와 같은 역할 단, 필드가 존재할 경우에는 요소를 배열 끝에 추가한다. 즉, push 하는 순간 배열로 바뀝니다.

저는 id가 2인 데이터 channels-cid값에 배열로 해당값을 'channels TV1', 'channels TV2', 'channels TV3' 추가하여 update해보도록 하겠습니다!

def test_update_movie(id, cid):
     mongo = get_client()
     add_cid_movie = []
     for cid_data in cid:
        filter_val = { "id" :  id }
        update_val = { '$push' : {'channels' : {'cid' : cid_data}} }
        list = update_item_many(mongo, filter_val, update_val, 'test', 'movie')
        add_cid_movie.append(list)
     print(f'{add_cid_movie}')

test_update_movie('2', ['channels TV1', 'channels TV2', 'channels TV3'])

log, DB 확인 👀

log 샷 ✔
[<pymongo.results.UpdateResult object at 0x000002054EE543A0>, <pymongo.results.UpdateResult object at 0x000002054EE547C0>, <pymongo.results.UpdateResult object at 0x000002054EE54850>]
DB 샷 ✔

$pull 연산자 사용하여 update하기 🥴

🌟 앞에 삭제 게시글에서 통으로 데이터가 삭제 된 것을 기억하시지요?? 이제부터 $pull 연산자를 사용해 해당값만 지우는 방법에 대해 기록을 해보려고 합니다~

-$pull 연산자: 조건을 적으면 그 부분만 삭제된다. 즉, 여러개의 값 중 해당하는것만 삭제됩니다.

저는 id가 2이고 channels에 cid가 SCREN1인 값만을 update로 지워보도록 하겠습니다!

def test_del_group(id, cid):
    mongo = get_client()
    del_cid_group = []
    for data in cid:
        # t_cid = data['cid']
        filter_val = { "id" :  id }
        unset_val = { "$pull" : { "channels" : {"cid" : data} } }
        list = update_item_many(mongo, filter_val, unset_val, 'test', 'movie')
        del_cid_group.append(list)
    print(f'{data}')
    print(f'{cid}')  
    print(f'{del_cid_group}')

test_del_group('2', ['SCREN1'])

log, DB 확인 👀

log 샷 ✔
SCREN1
['SCREN1'][<pymongo.results.UpdateResult object at 0x000001C617F445E0>]

DB 샷 ✔
SCREN1 값이 사라진게 눈에 보이시죠??

+ 여러값도 지워보기 🥴

어떻게하면 좋을까요? 별거 없어요~ 위에 소스에서 그냥 함수 부를때 넘겨주는 파라미터값에 지울 데이터만 추가해주면 됩니다~~

def test_del_group(id, cid):
    mongo = get_client()
    del_cid_group = []
    for data in cid:
        # t_cid = data['cid']
        filter_val = { "id" :  id }
        unset_val = { "$pull" : { "channels" : {"cid" : data} } }
        list = update_item_many(mongo, filter_val, unset_val, 'test', 'movie')
        del_cid_group.append(list)
    print(f'{data}')
    print(f'{cid}')  
    print(f'{del_cid_group}')

test_del_group('2', ['channels TV1', 'channels TV2', 'channels TV3'])

바로 요렇게요!! 위에랑 달라진 부분은 마지막 줄에 파라미터 값만 입니다~

db를 확인해볼까요?

DB 샷 ✔

profile
호기심이 많은 개발자

0개의 댓글