Heim > Artikel > Backend-Entwicklung > Bei der Paging-Abfrage in umgekehrter Reihenfolge werden beim Umblättern neue Daten in die Datenbank eingefügt, was dazu führt, dass doppelte Daten zurückgegeben werden. Gibt es hierfür eine gute Lösung? Vielen Dank euch allen
Ist das die Datenduplizierung, von der Sie sprechen? Während des Umblätterns hat jemand ein Datenelement eingefügt, und dann wurde das letzte Datenelement auf der ersten Seite der zweiten Seite zugewiesen und wurde zum ersten Datenelement Auf der zweiten Seite erscheinen diese Daten zweimal?
Wenn Sie das meinen, schlage ich vor, dass Sie bei der Abfrage einen Zeitpunkt angeben, zu dem die Daten gefunden werden, wenn Sie auf die Schaltfläche „Abfrage“ klicken, und dann auf dem Client blättern dass neue Daten vorhanden sind. Dies hat keinen Einfluss auf das Paging, da die neuen Daten überhaupt nicht abgerufen werden. Da es sich um einen Zeitrückblick handelt, werden neue Daten nicht angezeigt und es kommt auch nicht zu Datenauslassungen, selbst wenn neue Daten vorhanden sind. Wenn die Daten erneut geladen und abgerufen werden, werden die neuen Daten abgefragt.
Ich habe mich vor einiger Zeit mit einem ähnlichen Problem auf der mobilen Seite befasst:
Zuerst ist es in Pulldown (Abrufen der neuesten Daten) und Sliding unterteilt nach oben (Abrufen der vorherigen Daten).
2. Jedes Mal, wenn ich nach oben schiebe, um die vorherigen Daten abzurufen, übergebe ich eine ID und verwende diese ID als Bedingung, um die Daten abzurufen. Wenn Sie sich in umgekehrter Reihenfolge befinden, können Sie grundsätzlich davon ausgehen, dass die ID auch in umgekehrter Reihenfolge vorliegt. Die gerade übergebene ID sollte die kleinste ID in den zuvor erhaltenen Daten sein, außer beim ersten Mal, wenn Sie Daten abrufen In Zukunft werden es Daten sein, die kleiner als diese ID sind
3 Wenn Sie die Daten zum ersten Mal abrufen, können Sie einfach die ersten Daten der Reihe nach abrufen, da keine ID vorhanden ist.
Ich hoffe, das hilft!
Sorry ist die beste Sprache der Welt.
Meine Antwort basiert auf NodeJS.
Aber es spielt keine Rolle, verstehen Sie einfach die Idee.
-------Ursprüngliche Antwort------
Als ich mir die API von binding.net ansah, stellte ich fest, dass sie über zwei weitere Methoden verfügt.
Die Syntax basiert auf Mungo
Eine davon ist paging und pagify. Wenn es beispielsweise 20 Seiten gibt, Model.find(query).skip(page*20 - 20).limit(20).
Die zweite besteht darin, mehr danach zu laden, insbesondere danach. Ich habe so etwas noch nie entwickelt und bin mir nicht sicher, ob Mongodb danach ein solches Attribut hat. Es ist jedoch relativ einfach, sich auf Dinge in einer Sortierung zu verlassen, Model.find(query).sort('-time').where({time:{$gt:TIME}}).limit(20)
Es wäre besser, wenn mongodb etwas Ähnliches wie danach hätte. (Beachten Sie, dass die Zeit möglicherweise abstürzt, die ID jedoch nicht.)
Model.find(query).sort('-time').after({id:ID}).limit(20)
GET https://coding.net/api/activities/projects_last?last_id=14959187