变量不会为很长的 pymongo ipython 保留值

Variables don't hold value for very long pymongo ipython

也许我应该重新启动计算机,但我的变量似乎正在丢失它们的值。一个简单的聚合似乎只能在短时间内保存我的数据库的内容。注意:我在 ipython 笔记本中执行此操作。

MONGODB_URI ='mongodb://username:password@***.mongolab.****/***'
client = MongoClient(MONGODB_URI)
db = client.get_default_database()
collectn = db.collection_name

pipe = [
    {"$unwind":"$predictions"},
    {"$match": {"predictions.t_obj": datetime.datetime(2015, 10, 29, 11, 0)}}
]
should_be_data = collectn.aggregate(pipe)
list(should_be_data)
// returns what we expect, i.e. data

list(should_be_data)
// returns []

为什么我的变量内容消失了?

should_be_data 不是 list/data-container,而是 生成器

第一次 运行 list(should_be_data) 时,发电机已完全耗尽。此行消耗生成器中的元素,并将它们存储在新列表中。

第二次 运行 list(should_be_data) 时,生成器已经耗尽,因此 returns 没有更多的元素。

如果你想让它成为一个列表,只需替换

should_be_data = collectn.aggregate(pipe)

should_be_data = list(collectn.aggregate(pipe))