我可以只获取 Cursor 对象 (pymongo) 中的第一项吗?
Can I just get the first item in a Cursor object (pymongo)?
所以我通过
创建了一个 Cursor 对象
cdb=self.mongo['bleh_bleh_bleh_setup_here']
data=cdb[collection].find(query_commands_here)
不用担心上面的语法。假设我可以成功创建这样的游标对象
我知道我可以做一个 for
循环来遍历对象,但我只想要这个对象的第一个项目。有没有比循环更有效的方法?
编辑:
为了让事情更清楚,'bleh_bleh_bleh_setup_here' 只是连接到所需 mongoDB 的路径,而 'query_commands_here' 是诸如 {field1:{'$gt':num1}, field2:{'$ne':num2}}
之类的查询。该行
data=cdb[collection].find(query_commands_here)
将为我提供一个 Cursor 对象,我可以使用 for
循环对其进行迭代。所以像
for item in data:
print item
将打印出对象中的每个条目。它工作得很好。但是,根据文档,此游标对象应具有名为 .hasNext()
的方法,如果有下一个条目,该方法应 return 为真。到目前为止,出于某种奇怪的原因,我还没有找到让它工作的方法。 data.next()
确实给了我一个条目。我想确保我可以有那个条件来确保我不会为一个什么都不包含的游标对象调用 .next()
,虽然我没有预见到这种情况会发生,但我会假设它会在某个时候发生。
.find_one()
会 return 给你一个符合条件的文档:
cdb[collection].find_one(query_commands_here)
请注意 PyMongo Cursor 没有 hasNext()
方法。我要做的是调用 cursor.next()
并处理 StopIteration
异常:
try:
record = cursor.next()
except StopIteration:
print("Empty cursor!")
您还可以执行以下操作(无需处理 StopIteration
异常):
cur = cdb[collection].find(query_commands_here)
record = next(cur, None)
if record:
# Do your thing
这是有效的,因为 python 的内置 next() 将 return 到达迭代器末尾时的默认值。
所以我通过
创建了一个 Cursor 对象cdb=self.mongo['bleh_bleh_bleh_setup_here']
data=cdb[collection].find(query_commands_here)
不用担心上面的语法。假设我可以成功创建这样的游标对象
我知道我可以做一个 for
循环来遍历对象,但我只想要这个对象的第一个项目。有没有比循环更有效的方法?
编辑:
为了让事情更清楚,'bleh_bleh_bleh_setup_here' 只是连接到所需 mongoDB 的路径,而 'query_commands_here' 是诸如 {field1:{'$gt':num1}, field2:{'$ne':num2}}
之类的查询。该行
data=cdb[collection].find(query_commands_here)
将为我提供一个 Cursor 对象,我可以使用 for
循环对其进行迭代。所以像
for item in data:
print item
将打印出对象中的每个条目。它工作得很好。但是,根据文档,此游标对象应具有名为 .hasNext()
的方法,如果有下一个条目,该方法应 return 为真。到目前为止,出于某种奇怪的原因,我还没有找到让它工作的方法。 data.next()
确实给了我一个条目。我想确保我可以有那个条件来确保我不会为一个什么都不包含的游标对象调用 .next()
,虽然我没有预见到这种情况会发生,但我会假设它会在某个时候发生。
.find_one()
会 return 给你一个符合条件的文档:
cdb[collection].find_one(query_commands_here)
请注意 PyMongo Cursor 没有 hasNext()
方法。我要做的是调用 cursor.next()
并处理 StopIteration
异常:
try:
record = cursor.next()
except StopIteration:
print("Empty cursor!")
您还可以执行以下操作(无需处理 StopIteration
异常):
cur = cdb[collection].find(query_commands_here)
record = next(cur, None)
if record:
# Do your thing
这是有效的,因为 python 的内置 next() 将 return 到达迭代器末尾时的默认值。