当所有元素都被迭代时,pymongo 游标会发生什么?

What happens to a pymongo cursor when all its elements have been iterated?

我想使用 pymongo 从我的数据库中获取一组条目。好像要return一个"cursor"代替。我不知道那是什么。

    all_nodes = pymongo.MongoClient("mongodb://localhost")["provemath"]["nodes"].find(None)

    print('ALL NODES')
    for node in all_nodes:
        print(node)

    print('STILL NODES')
    for node in all_nodes:
        print(node)

输出为:

ALL NODES
{'_notes': [], '_examples': [], '_type': 'definition', '_plural': None, '_counterexamples': [], '_intuitions': [], '_id': 'unique', '_importance': 4, '_name': 'unique', '_dependencies': [], '_description': 'An occurence of a property is __unique__ if the property occurs exactly $ time.'}
{'_notes': ['Vertices are often drawn as a dot.  They are also called *nodes*.'], '_examples': [], '_type': 'definition', '_plural': '__vertices__', '_counterexamples': [], '_intuitions': [], '_id': 'vertex', '_importance': 4, '_name': 'vertex', '_dependencies': ['unique'], '_description': 'A __vertex__ is a fundamental unit used to create graphs.'}
{'_notes': ['It is possible that $a=b$.'], '_examples': [], '_type': 'definition', '_plural': None, '_counterexamples': [], '_intuitions': ['Edges are usually drawn as a line or curve connecting two vertices.  In the case that $a=b$, the edge is drawn as a small loop that connects $a$ to itself.'], '_id': 'edge', '_importance': 4, '_name': 'edge', '_dependencies': ['unique', 'vertex'], '_description': 'An __edge__ is a set ${a,b}$ where $a$ and $b$ are vertices.'}
{'_notes': [], '_examples': [], '_type': 'definition', '_plural': None, '_counterexamples': [], '_intuitions': [], '_id': 'loop', '_importance': 4, '_name': 'loop', '_dependencies': [], '_description': 'A __loop__ is an edge $e = {a,a} = {a}$.'}
STILL NODES

光标只能用一次吗? (或者还有其他事情发生?)如果我想要常规的数组行为,我将如何获得它?

是的。 Cursor 只适合一次使用。如mongodb manual

中所述

By default, the server will automatically close the cursor after 10 minutes of inactivity or if client has exhausted the cursor.

要使您输出为 python 列表,请使用

node_list = all_nodes[:]

node_list = [node for node in all_nodes] 

另见 this question