삭제 기능

HEUKWU·2023년 1월 13일
0


mongoDB의 delete_one을 이용할건데 삭제를 적용할 항목을 식별해주기 위해 num변수를 DB에 추가했다.
num변수는 DB에 저장된 리스트의 길이에 1을 더한 값을 넣어준다.

bucket_list = list(db.bucket.find({}, {'_id: False'}))
num = len(bucket_list) + 1
doc = {
	'num': num,
    'bucket': bucket_receive,
    'done': 0
        }
db.bucket.insert_one(doc)


이렇게 항목별로 식별할 수 있는 번호가 생겼다.

이제 삭제버튼을 누르면 식별번호에 맞는 항목을 DB에서 삭제하면 된다.

@app.route("/bucket/delete", methods=["POST"])
def bucket_delete():
    num_receive = request.form['num_give']
    user = db.bucket.delete_one({'num': int(num_receive)})
    return jsonify({'msg': '삭제 완료!'})

하지만 중요한 사실을 잊고 있었는데
중간 항목을 삭제하고 새로운 항목을 추가한다면 num변수는 DB리스트의 길이에 따라서 부여되기 때문에 같은 식별번호를 가진 항목이 나오게 된다.

만약 A, B, C 항목이 있다면 DB에는 식별번호를 항목당 1, 2, 3을 부여 받게 될 것이다.
여기서 B 항목을 삭제하면 A, C의 식별번호는 1, 3일 것이다.
여기서 새로운 D항목을 추가한다면 DB리스트의 길이는 2이기 때문에 D항목의 식별번호도 3이 될것이다.
따라서 A, C, D의 식별번호는 1, 3, 3이 된다.

이 상태에서 삭제를 하거나 완료를 하면 식별번호가 같은 항목이 있어 제대로 된 기능을 하지 못한다.

고민 끝에 식별번호를 부여하는 시점에 만약 DB에 같은 식별번호가 있으면 +1값을 식별번호로 주는 방법을 떠올렸다.

 if (db.bucket.find_one({'num': num}) is not None):
        num = num + 1
        doc = {
            'num': num,
            'bucket': bucket_receive,
            'done': 0
        }

    else:
        doc = {
            'num': num,
            'bucket': bucket_receive,
            'done': 0
        }

    db.bucket.insert_one(doc)

이제 아까의 A, B, C의 예시를 적용해 보면, B항목을 삭제하고 D항목을 추가해도 식별번호3을 C항목이 이미 갖고 있기 때문에 D항목의 식별번호는 4가 된다.
A, C, D의 식별번호 1, 3, 4

이렇게 제대로 된 삭제 기능을 구현할 수 있게 됐다.

0개의 댓글

관련 채용 정보