MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pagination MongoDB sur les tableaux - Vérifiez si $slice a atteint le début du tableau

Une façon de faire est d'utiliser $cond opérateur :

Requête :

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 ] }
      }
    }
  ])

Tester : mongoplayground

Explication :

Donc la syntaxe de $slice est { $slice: [ <array>, <position>, <n> ] } à partir de là si vous passez une valeur supérieure à la taille du tableau pour <position> vous obtiendrez alors un tableau vide en réponse.

Ici, nous utilisons $cond pour envoyer conditionnellement l'une ou l'autre des valeurs de inputPosition ou la valeur de maxNumber à <position> . De plus, j'ai une valeur codée en dur de maxNumber à 1000 mais en général tout dépend de votre choix - Vous pouvez utiliser un nombre inférieur, cela n'a pas d'importance, ce nombre doit être une valeur supérieure à la taille de votre tableau, Vous pouvez aussi vous size of array + 1 mais au lieu de faire cette opération si vous pensez que votre tableau est toujours inférieur à 1000, utilisez directement 1000 .

Réf : $slice