Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以只获取游标对象(pymongo)中的第一项吗?_Python_Mongodb_Pymongo - Fatal编程技术网

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