sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB-paginering på arrays - Tjek om $slice nåede begyndelsen af ​​arrayet

En måde at gøre det på er at bruge $cond operatør:

Forespørgsel:

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

Forklaring:

Altså syntaks for $slice er { $slice:[ , , ] } fra det, hvis du sender en værdi større end størrelsen af ​​array for så får du et tomt array som svar.

Her bruger vi $cond at betinget sende en af ​​værdierne af inputPosition eller værdien af ​​maxNumber til . Derudover har jeg en hårdkodet værdi på maxNumber til 1000 men generelt afhænger det hele af dit valg - Du kan bruge et mindre tal, det gør ikke noget, det tal skal være en større værdi end størrelsen på dit array. Du kan også størrelsen af ​​array + 1 men i stedet for at udføre den handling, hvis du mener, at dit array altid er mindre end 1000, så brug direkte 1000 .

Ref : $slice



  1. Fjern dubletter på mongodb

  2. mongo/node TypeError:tilbagekald er ikke en funktion ved forespørgsel

  3. Hvordan bruger man interface type som en model i mgo (Go)?

  4. Hvordan indstiller man MongoClient-forbindelsestimeout?