簡體   English   中英

我可以只獲取 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()方法,如果有下一個條目,它應該返回 True 。 到目前為止,由於某些奇怪的原因,我還沒有找到讓它工作的方法。 data.next()確實給了我一個條目。 我想確保我可以有這樣的條件,以確保我不會為一個不包含任何內容的游標對象調用.next() ,盡管我沒有預見到這種情況會發生,但我認為它會發生在某一點。

.find_one()會返回一個符合條件的文檔:

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() 將在到達迭代器末尾時返回默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM