我有一个查询mongodb集合的函数
def checkDb():
signals = mydb['collection']
findInMongo = signals.find({}, {'_id': False})
for x in findInMongo:
return x
我想返回集合中的所有内容而不将其打印到控制台。当我运行上面的代码时,我得到一个结果:
{'Date': testvalue, 'Open': testvalue, 'High': testvalue, 'Low': testvalue, 'Close': testvalue, 'Volume':testvalue}
我跑步时
def checkDb():
signals = mydb['collection']
findInMongo = signals.find({}, {'_id': False})
for x in findInMongo:
print(x)
我从我的收藏中获取了每个文档,这正是我想要的。
如何使代码返回每个文档而不是使用print
?
答案 0 :(得分:1)
问题是您可能需要return
时正在使用yield
:
def checkDb():
signals = mydb['collection']
findInMongo = signals.find({}, {'_id': False})
for x in findInMongo:
return x # This will exit after the first result
return
退出该函数,从字面上返回该函数的值,并退出范围。另一方面,yield
将继续产生值,直到迭代器耗尽为止(或者findInMongo
循环中没有更多元素)。
相反,做
for
因为def checkDb():
signals = mydb['collection']
findInMongo = signals.find({}, {'_id': False})
for x in findInMongo:
yield x
# which allows you to do
vals = list(checkDb())
现在是迭代器(或更具体地说,是生成器)。更高版本的python3还引入了美观的checkDb()
语法
yield from
或者,如果它是迭代器,则可以返回def checkDb():
signals = mydb['collection']
findInMongo = signals.find({}, {'_id': False})
yield from findInMongo # yield from a collection directly
findInMongo
所有这些都将支持def checkDb():
signals = mydb['collection']
findInMongo = signals.find({}, {'_id': False})
return findInMongo # return the iterator directly
或list(checkDb())
语法