2016-07-19 9 views
0

Ich möchte alle Dokumente nach Feld x (mehrere Dokumente können haben den gleichen Wert auf diesem Feld). Dann jedes Mal, wenn ich "next" drücke, lädt es die 10 weiteren Dokumente.Wie effizientes Paging in Mongodb

Wenn mehrere Dokumente haben den gleichen Wert , können sie bei angezeigt werden, was auch immer, um unter ihnen, es spielt keine Rolle.

Da skip() bei großen Datenmengen ineffizient ist, wie geht das effizient? Keine Seitennumerierungsnummer erforderlich, nur unendliche Bildlauffunktion.

Antwort

0

Wenn Sie keine Paginierungsnummer benötigen, können Sie einfach monoton steigende eindeutige id Werte verwenden; wie _id mit ObjectId().

mit Ihrem Beispiel:

/* Value of first scroll record, and to be updated every iteration */ 
var current_id; 

var scroll_size = 10; 

db.collection.find({_id: {$lt: current_id}}). 
        limit(scroll_size). 
        sort({ 
          _id: -1, 
          x: 1 // Depending on your use case 
        }); 

Das obige Beispiel wird Ihnen neuesten Aufzeichnungen. Abhängig von Ihrem Anwendungsfall müssen Sie entscheiden, was mit dem neu eingefügten Dokument geschehen soll.

Wenn Sie ein anderes Feld als _id zum Durchblättern verwenden, stellen Sie sicher, dass Sie das entsprechende Feld indexes auf dem Feld hinzufügen.

+0

Aber das gibt keine Datensätze, die nach x sortiert sind, oder? Dies ist nach _id sortiert – Saitama

+0

Wie Sie im Beispiel von 'sort()' sehen können, wird das Ergebnis nach '_id' und' x' sortiert. Sie können auch versuchen, entweder A) "x" in den passenden Teil neben "_id" oder B) zu verwenden und nur "x" in den passenden Teil zu verwenden. Was ist der Wert von 'x'? –