본문 바로가기

내일배움 캠프/TIL

2023 03 17 미니 프로젝트 끝

오늘은 미니 프로젝트가 끝나고 자기의 코드를 되돌아보고 어떤게 마음에 드는지에 대해 생각해보는 시간을 가졌다

지금 생각해보면 게시판의 인덱스 구현이 처음에는 되게 힘들었었다 

지금 만들어진 인덱스값을 구하는 코드는

    last_index=col.find().sort('_id',-1).limit(1)
    if col.count_documents({}) == 0:
        index=1
    else:
        index=last_index[0]['index']+1

_id값으로 정렬했을때 한개의 데이터만 가지고와서 그 값의 인덱스값을 확인하는 식으로 인덱스를 추가하는 방식이었는데 처음에는

col.count_documents()

를 이용해서 데이터의 갯수를 읽은다음에 하나하나 갯수를 데이터에 넣어서 인덱스를 구현하려고했었다

하지만 삭제를 구현 하게되니까 데이터가 줄어들어서 5개에서 4개가되서 4가 2번나와서 수정이 안된다거나 하는 이슈가 발생을 하여서 처음 작성한 코드를 작성하게 되었다. 이를통해 인덱스 값은 항상 마지막값을 기준으로 나오게 되었는데 이러니까 123456이 있다고 했을때 5번이 삭제가되면 7번이나오지만 6번이 삭제가 되면 또 6번이 나오는 개인적으로는 불편함이 느껴졌기떄문에

col.delete_one({'index':index2})
        all_data=col.find({'index':{'$gt':index2}})
        for data in all_data:
            current_index = data['index']
            new_index = current_index-1
            col.update_one({'_id': data['_id']},{'$set':{'index':new_index}})

데이터의 삭제가 발생하면 그 인덱스 값보다 높은 인덱스를 가진 데이터 {'$gt':<data>} 를 사용해서 찾아낸 데이터를 하나하나 새로 업데이트를 하는 방식을 이용해서 낮은 번호가 삭제되어도 인덱스값을 고쳐서 번호가 끊김이 없이 나올수 있도록 구현을 했었다

이덕분인지 수정을 만들떄에도 크게 무리가 없이 수정하고자 하는 데이터를 수정을 할수가있었는데 _id값이란게 몽고db에서 자체적으로 가지는 고유한 값이라는걸 알수있게 되어가지고 이점이 되게 도움이 된거같습니다