我正在處理一個系統,其中用戶能夠使用多個參數查詢我的MongoDB數據庫。當用戶查詢時,他們會得到20個結果。然而,用戶可能想獲得額外的20個結果,然後另一個等...MongoDB恢復舊查詢或跳轉到文檔
我編程這樣一個系統的第一個直覺是使用「跳過」功能,並跳過結果數已經返回給用戶;然而,與此相關的問題是,在用戶運行新查詢以獲取新結果所需的時間內,很多(數百或數千個)匹配用戶查詢的新文檔可能已添加到MongoDB中。因此,「跳過」將不會恢復查詢最後放出的位置。
例如,
Documents:
1,2,3,4,5,6,7,8,9,10,11,12,13,14, etc...
我們在文檔編號20處離開。用戶的下一個查詢說要跳過20.但是,已添加500個新文檔。現在跳過應該是520,以便在最後放出的地方提取查詢。但是,我目前無法跟蹤自上次查詢用戶以來添加了多少文檔。
我的下一個想法是讓用戶提交最後一個查詢中收到的最後一個文檔的Id以及用戶在所有查詢中收到的文檔總數。我會告訴MongoDB「跳過」用戶收到的文檔總數 - 1.然後,我會將每個文檔與用戶發送的文檔的ID進行比較,直到找到用戶離開的位置。
例子:
public static String getDocument(String lastId, int skip, BasicDBObject query)
{
DBCursor cursor = collection.find(query).skip(skip);
while(cursor.hasNext())
{
BasicDBObject obj = (BasicDBObject) cursor.next();
String id = obj.getString("id");
if(id.equals(lastId))
{
//Then we know that here is where we left off, and to start getting new documents
}
}
}
此,我認爲,如果是已經增加了許多新的文件效率低下,並且可能可能會讓查詢時間慢。這是否正確?
有沒有辦法查詢MongoDB,告訴它跳過給定的文檔ID之前的所有結果?如果沒有,是否有處理這個問題的標準方法?我不知道該怎麼做。