2017-01-09 2 views
0

Ich versuche herauszufinden, wie ich meine Daten effizient paginieren kann. Wenn ich eine URL wie zum Beispiel: example.com/items?page=5 habe, wie kann ich die korrekten Datensätze jedes Mal abrufen (so dass derselbe Datensatz nicht auf einer anderen Seite angezeigt wird)? Ich dachte, ich müsste zuerst die DB-Datensätze sortieren und dann mit Mungo eine Bereichsabfrage wie die unten beschriebene durchführen.Scalable Express + Mongoose Sort und Limit Seitenumbruch

Wie geht das, wenn die Anzahl der Datensätze schnell skaliert wird? Ich mache mir Sorgen, dass der Sortierprozess viel zu lange dauert und den Prozess behindert. Irgendein Rat?

Submission.find({ 
    /* First Case: Hour */ 
    created: { $lt: new Date(), $gt: new Date(year+','+month+','+day+','+hour+','+min+','+sec) } // Get results from start of current hour to current time. 
    /* Second Case: Day */ 
    created: { $lt: new Date(), $gt: new Date(year+','+month+','+day) } // Get results from start of current day to current time. 
    /* Third Case: Month */ 
    created: { $lt: new Date(), $gt: new Date(year+','+month) } // Get results from start of current month to current time. 
    /* Fourth Case: Year */ 
    created: { $lt: new Date(), $gt: new Date(year) } // Get results from start of current year to current time. 
}) 
+0

Ja Sortierung zu erhalten, ist notwendig und es braucht Zeit, aber denken Sie daran, das Feld zu indizieren, auf dem Sie sortieren möchten. –

+0

genial! Danke für diesen Tipp. Ich werde meine Sortierkriterien indexieren :) – Clement

Antwort

1

Sie können auf folgende Abfrage arbeiten:

var query = Model.find(conditions).sort(sort).skip(skip).limit(limit); 

wo

  1. Zustand wird sagen, sein {Alter: {$ gt: 20}}
  2. Art sagen wird { Name: 1}
  3. überspringen wird sagen 20
  4. li mit wird 10

dann die folgende Abfrage ausführen sagen werden, um die Datensätze

return query 
     .exec() 
     .then(function (cursor) { ...... }); 
+1

Danke für Ihre Antwort! Ich bin nur besorgt, dass nach 'https: // docs.mongodb.com/manual/reference/method/cursor.skip /' die 'skip()' Methode "CPU-intensiv ist. Mit größeren Sammlungen, cursor.skip() kann IO gebunden werden " – Clement