Mongodb에서 불러온 continents cursor object를 사용하여, 대륙의 id와 name을 각각 리스트로 저장해야 했다.
continent
의 변수에 cursor object를 저장하고, contintent_by_name
과continents_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}))
참조한 문서들