簡體   English   中英

CouchDB 2.0中的芒果查詢是否需要startkey分頁

[英]Is startkey pagination required for Mango queries in CouchDB 2.0

我一直在尋找這個。 我正在運行CouchDB 2.0,並且了解在檢索一組數據時可以選擇使用傳統視圖還是使用較新的Mango查詢。

因此,我目前正在使用Mango查詢語法並獲取所需的結果-但是現在我需要實現分頁。 在CouchDB 2.0中研究分頁時,我發現了圍繞該主題的精彩討論:

http://docs.couchdb.org/en/2.0.0/couchapp/views/pagination.html

它建議對大數據集進行分頁的最佳方法不是使用skip,而是使用startkey並執行從一頁到下一頁的鏈接列表分頁。

因此這對我來說很有意義,並且適用於我的應用程序,但是當我轉向Mango / _find API時,我看不到任何傳遞startkey的方法:

http://docs.couchdb.org/en/2.0.0/api/database/find.html

令人困惑的是,它確實接受了skip參數,但是沒有開始鍵。

有人能解釋這里發生了什么嗎? Mango / _find中的性能特征是否有很大不同,以便我們可以安全地對大型數據集使用跳躍? 還是在遍歷更大的數據集時使用帶有startkey的視圖?

在最近的AFAIK文檔中似乎都沒有回答這個特定問題。 任何幫助將不勝感激。

您可能可以通過在選擇器中包含約束來解決缺少開始startkey / endkey支持的問題:

"selector": {
    "_id": { "$gte": "myStartKey", "$lte": "myEndKey"}
}

(只有我的兩分錢;也許其他人有更完整的答案)

CouchDB記錄的分頁方法僅適用於map-reduce / views類型的查詢,而不適用於Mango查詢。 首先是becos,對於視圖來說,有一個用於排序的鍵字段,因此,使用“ startkey ”可以很容易地跳過以前的文檔,對於非唯一鍵,可以通過添加startkey_docid來跳過

對於選擇器查詢,要有效地跳過以前的記錄,您將必須查看原始查詢中指定的排序鍵,並添加其他條件以跳過那些已處理的文檔。 例如,如果您對一個數字字段進行排序(以asc排序)並處理到value = 10,則可以在原始選擇器中添加一個{“ field”:{“ $ gte”:10}}作為$和邏輯。 如果您有多個排序字段,這將變得很復雜。 跳過/限制可能是更簡單的選擇器查詢分頁方法。

暫無
暫無

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

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