(Python, MongoDB) Cursor로 두개 이상의 list를 만들 때

Kepler·2020년 3월 29일
0

Python

목록 보기
12/12

에러 내용:

Mongodb에서 불러온 continents cursor object를 사용하여, 대륙의 id와 name을 각각 리스트로 저장해야 했다.

continent의 변수에 cursor object를 저장하고, contintent_by_namecontinents_by_id 를 list comprehension으로 작성했을 때, 두번째로 for loop을 돌린 continents_by_id응 빈 배열을 리턴하는 에러가 발생하였다.

 continents = db.continents.find({}, {"name":True})
 
 continents_by_name = [continent['name'] for continent in continents]
 continents_by_id = [continent['_id'] for continent in continents]
 
 
 
 print(continents)
 > <pymongo.cursor.Cursor object at 0x10cab2d60>
 
 print(continents_by_name)
 > ['North America', 'Asia', 'Africa', 'South America', 'Europe', 'Oceania', 'Antarctica']
 
 print(continents_by_id)
 > []

에러 이유:

먼저 cursor에 대한 이해가 필요하다.

cursor란 db.<collection이름>.find()로 mongoDB에서 해당 collection의 documents를 찾을 때, 결과로써 리턴되는 documents의 위치를 가르키는 포인터(메모리주소를 저장하고 참조)이다.


(Image: https://www.quora.com/What-is-cursor-in-MongoDB-and-its-use)

cursor는 cursor.next()를 사용하여, 다음 data를 순차적으로 호출 할수 있는, iterator 객체 이다.

iterator는 원래 단 한번만 사용 할 수 있도록 디자인 되어있는 객체이다. 따라서, 두번 이상 사용하고 싶을 경우, iterated data를 리스트에 저장하거나, iterator를 다시 한번 불러와야 한다.

해결:

cursor object를 처음으로 불러왔을 때, list()로 저장했다.

continents = list(db.continents.find({}, {"name":True}))

참조한 문서들

profile
🔰

0개의 댓글