본문으로 바로가기

Pymongo로 순위를 갱신하기

category UniteWiki/Backend 2022. 3. 4. 16:06

Pymongo 에서 순위를 갱신할 때는 MongoDB에서 업데이트를 하는 법에 대해 숙지할 필요가 있다.

DB.Collection.update_many({'rank':data['rank']},{'$set':data},upsert=True)

위의 코드는 upsert 옵션을 넣음으로써 'rank' 인덱스에 데이터가 이미 존재하면 '업데이트'를 하는 코드이다.

즉 메소드에 필요한 변수를 해석해서 쓰면 이런 형식이된다.

DB.Collection.update_many(index, dataToSet ,upsert=True)

처음에 다음과 같이 했다가 시행착오를 겪었다.

DB.Collection.update_many({'userid':data['userid']},{'$set':data},upsert=True)
DB.Collection.find().sort('rank',-1)

이렇게 하면 메모리 측면에서도 상당히 좋지 않다. 특히 sort() 메소드를 사용할 경우 MongoDB에서는 무료 서버를 이용할 때 데이터 용량이 조금만 커도 바로 메모리 제한에 걸려버린다. ( 경험하였음. )

 

그냥 바로 필요한 인덱스 키를 통해서 데이터를 Set 해주면 된다.

최종적으로 사용한 코드는 맨 위의 것 처럼 다음과 같다.

DB.Collection.update_many({'rank':data['rank']},{'$set':data},upsert=True)

 

별것 아닌것 같지만 특정 오픈 소스의 이런 메소드들을 제대로 숙지 하지 못해 날 쩔쩔 매게 했다.

하지만 늘 그렇듯 이런 경험이 나를 레벨업 시켜주는 것 아니겠는가.