我如何从python3 mongodb查询中的for循环返回所有值

时间:2019-06-04 00:44:23

标签: python jquery mongodb find return

我有一个查询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

1 个答案:

答案 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())语法