Python 我可以只获取游标对象(pymongo)中的第一项吗?
所以我创建了一个游标对象Python 我可以只获取游标对象(pymongo)中的第一项吗?,python,mongodb,pymongo,Python,Mongodb,Pymongo,所以我创建了一个游标对象 cdb=self.mongo['bleh_bleh_bleh_setup_here'] data=cdb[collection].find(query_commands_here) 不要担心上面的语法。假设我可以成功地创建这样的游标对象 我知道我可以执行for循环来迭代对象,但我只需要这个对象的第一项。有没有比循环更有效的方法 编辑: 为了让事情更清楚,“bleh_bleh_bleh_setup_here”只是连接到所需mongoDB的路径,“query_comman
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)
将给我一个游标对象,我可以使用for
循环进行迭代。比如
for item in data:
print item
将打印出对象中的每个条目。它工作得很好。但是,根据文档,这个游标对象应该有一个名为.hasNext()
的方法,如果有下一个条目,该方法应该返回True。到目前为止,由于一些奇怪的原因,我还没有找到让它工作的方法data.next()
确实给了我一个条目。我想确保我可以有这样的条件,以确保我不会为一个不包含任何内容的游标对象调用.next()
,尽管我没有预见到这种情况会发生,但我会假设它会在某个时刻发生。将返回一个与条件匹配的文档:
cdb[collection].find_one(query_commands_here)
请注意,没有
hasNext()
方法。我要做的是调用cursor.next()
并处理StopIteration
异常:
try:
record = cursor.next()
except StopIteration:
print("Empty cursor!")
您还可以执行以下操作(无需处理
StopIteration
异常):
这是因为python内置的next()在到达迭代器末尾时将返回默认值。谢谢!现在我想保留游标对象中的所有信息,同时只从第一个条目中检索一些信息(因为我在
.find
中有一个sort命令)。使用cdb[collection].find()
和另一行cdb[collection].find_one(在这里查询命令,排序[('field_to_sort':-1)]
?或者更确切地说,我想要的是find_one
结果中的一个字段。我怎么能做到这一点呢?@JChao我想你只需要一个find()
命令。您可以调用cursor.next()
获取第一条记录,然后调用重置其状态。不过我个人没有尝试过-请仔细测试并记录发送到服务器的查询。谢谢。当我尝试检查对象是否有下一个时,我得到了属性错误:“Cursor”对象没有属性“hasNext”
。我不知道为什么is行不起作用。data.next()
和data.hasNext()
都返回errorsthanks。我通过使用c[I]找到了一个解决方法,I是索引。这将调用getitem函数,该函数在我的情况下运行良好。
cur = cdb[collection].find(query_commands_here)
record = next(cur, None)
if record:
# Do your thing