DataBase/MongoDB

[Flask] pymongo objectid 로 게시글 찾기

민돌v 2021. 10. 19. 21:44

몽고디비에서 도큐멘트를 생성할 때 자동적으로 priamry key 인 '_id'를 자동적으로 생성한다.

 

이걸 고유한 값으로 파이몽고에서 사용해줄려고 했지만,

'_id'값은 ObjectId 객체이기 때문에 파이썬에서 인식도 되지않고, 이 오브젝트 아이디 객체를 클라이언트에게 고대로 보낼 수가 없어 에러가 났다. (Type error.... ㅠ)

 

 

이 objectid를 사용하기 위해서는 2가지 방법을 이용할 수 있다

 

1. Object to str


첫번째 방법은 간단하게, objectid 객체를 string타입으로 변환하여 사용하는 방법이다.

 # object to str
post["_id"] = str(post["_id"])
post["count_heart"] = db.likes.count_documents({"post_id": post["_id"], "type": "heart"})

 

 

 

2. objectid 클래스 import 해주기


mongodb shell에서는 objectid를 그냥 호출해서 사용할 수 있지만,

파이썬에는 ObjectId라는 클래스가 내장되어있지 않아, 별도로 import해주어 사용해 주어야한다.

 

bson이라는 패키지에 있는데, pymongo를 설치할 때 함께 설치된다.

from bson.objectid import ObjectId
from pymongo import MongoClient


mongo = MongoClient("mongodb://localhost:27017")
db = mongo['db_name']
col = db['collection_name']

col.find_one({'_id':ObjectId('5f6d775c29be48f7e50ea68e')})

 

 

 

 

* 참고 : https://ssamko.tistory.com/38