MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Paginierung auf Arrays – Prüfen Sie, ob $slice den Anfang des Arrays erreicht hat

Eine Möglichkeit ist die Verwendung von $cond Betreiber :

Abfrage :

let inputPosition = -70
let positionConverted = -position // 70
let maxNumber = 1000

db.collection.aggregate([
    {
      $project: {
        comments: {
          $slice: [ "$comments",
            { $cond: [ { $gte: [ { $size: "$comments" }, positionConverted ] }, inputPosition, maxNumber ] }, 5 ] }
      }
    }
  ])

Test : mongoplayground

Erklärung:

Also Syntax von $slice ist { $slice: [ <array>, <position>, <n> ] } davon, wenn Sie einen Wert übergeben, der größer als die Größe des Arrays für <position> ist dann erhalten Sie ein leeres Array als Antwort.

Hier verwenden wir $cond um bedingt einen der Werte von inputPosition zu senden oder Wert von maxNumber zu <position> . Außerdem habe ich einen hartcodierten Wert von maxNumber bis 1000 aber im Allgemeinen hängt alles von Ihrer Wahl ab - Sie können eine kleinere Zahl verwenden, es spielt keine Rolle, diese Zahl sollte einen größeren Wert als die Größe Ihres Arrays haben. Sie können auch size of array + 1 aber anstatt diese Operation durchzuführen, wenn Sie glauben, dass Ihr Array immer kleiner als 1000 ist, verwenden Sie direkt 1000 .

Referenz: $slice