2017-06-21 30 views
0

我正在使用庫Cloudant來從Cloudant數據庫中收集文檔。每次運行python腳本時,我都會得到所有文檔,但我只想檢索從腳本的最後一次執行中添加的文檔,換句話說就是get_changes函數。Python - Cloudant獲取更改

我已經搜索了一個答案,但它似乎不是很容易找到。

Thaks尋求幫助,

Filippo。

回答

1

使用changes()方法。跟蹤最後一個序列號,並從那裏重新開始,只檢索未見的更改。

# Iterate over a "normal" _changes feed 
changes = db.changes() 
for change in changes: 
    print(change) 

# ...time passes 
new_changes = db.changes(since=changes.last_seq) 
for new_change in new_changes: 
    print(new_change) 

如果你也想在文檔的身體,你可以通過include_docs=True

https://github.com/cloudant/python-cloudant/blob/master/src/cloudant/database.py#L458

如果你想捕捉只新增加(而不是所有更改),您可以創建沿線的在數據庫設計文檔過濾功能:

function(doc, req) { 
    // Skip deleted docs 
    if (doc._deleted) { 
     return false; 
    } 
    // Skip design docs 
    if (doc._id.startsWith('_design')) { 
     return false; 
    } 

    // Skip updates 
    if (!doc._rev.startsWith('1-')) { 
     return false; 
    } 

    return true; 
} 

並應用到飼料的變化:

new_changes = db.changes(since=changes.last_seq, filter='myddoc/myfilter'): 
    # do stuff here 

,但可能是因爲容易簡單地得到在Python代碼中所有的變化和過濾器。

過濾功能:https://console.bluemix.net/docs/services/Cloudant/guides/replication_guide.html#filtered-replication

+0

是,帖子後,我試圖塔方法,它工作正常。我必須編輯這個問題,因爲我想要做的是僅檢索在最後一個序列標識之後上傳的其他文檔。您發佈的腳本還會返回設計文檔和文檔修改,但我對這些結果不感興趣。順便說一句,謝謝你的回答 –

+0

謝謝你這麼多xpqz,你的意見很有幫助 –