2016-11-22 3 views
0

zu optimieren Ich paginiere durch eine sehr große Sammlung von Dokumenten. Ich habe mich gefragt, ob dies ein effizientes Paginierungsverfahren in mongoDB mit _id's ist. Meine Sorge ist, dass jedes Mal, wenn ich die Abfrage mache, die gesamte Sammlung von IDs sortiert werden müsste, bevor ein Ergebnis zurückgegeben werden könnte. Ich habe dieses Dokument zum Optimieren von Abfragen mit Indizes gesehen, aber würde das für mich gelten, seit ich auf _id abgefragt habe, von dem ich dachte, dass es schon indiziert ist?Gibt es eine Möglichkeit, diese MongoDB-Abfrage für die Paginierung in Node.js

Paginierung Funktion:

function paginateDocs(currId, docsPerPage) { 
    const query = currId ? { _id: { $gt: currId } } : {}; 
    const queryOptions = { limit: usersPerPage, sort: '_id' }; 
    return mongo.find(query, queryOptions).toArray(); 
} 
+0

Es sollte den Standard-Index '{_id: 1}', und suchen Sie nach Dokumenten im '> currId' Bereich des btree. Kannst du die Ausgabe von 'mongo.explain (1) .find (query, options) einfügen?' – hyades

+0

Ich könnte das nicht in der Produktionsumgebung durchführen, also nehme ich an, das wäre nicht mehr nützlich, oder? –

Antwort

0

können Sie verwenden cursor.hint (Index), wo Sie Index als das, was alle Indizes, auf denen definieren können Sie sortieren möchten. Siehe diesen Link-> https://docs.mongodb.com/manual/reference/method/cursor.hint/

+0

Warum sollte ich den Standardindex überschreiben wollen? Wird es nicht standardmäßig auf _id indiziert? –

+0

Ja, ok, was Sie tun können, ist, da die Sortieroperation selbst sehr schwer für Sie ist, da Sie so viele Dokumente haben. Sie können versuchen, _ids in redis zu behalten, die einen Datenstrukturspeicher haben, der als Datenbank, Cache verwendet wird. Dies wird Ihre Anfrage viel schneller machen. –

+0

Dieser Link gibt Ihnen weitere Informationen zum Redis- –

Verwandte Themen