sql >> Database >  >> NoSQL >> MongoDB

MongoDB-paginering op arrays - Controleer of $ slice het begin van de array heeft bereikt

Een manier om dit te doen is om $cond . te gebruiken operator :

Vraag:

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

Uitleg:

Dus syntaxis van $slice is { $slice: [ <array>, <position>, <n> ] } daarvan af als u een waarde doorgeeft die groter is dan de grootte van de array voor <position> dan krijg je als reactie een lege array.

Hier gebruiken we $cond om voorwaardelijk een van beide waarden van inputPosition te verzenden of waarde van maxNumber naar <position> . Bovendien heb ik een hard gecodeerde waarde van maxNumber tot 1000 maar in het algemeen hangt het allemaal af van je keuze - je kunt een kleiner getal gebruiken, het maakt niet uit, dat getal moet een grotere waarde zijn dan de grootte van je array, je kunt ook size of array + 1 code> maar in plaats van die bewerking uit te voeren als je denkt dat je array altijd kleiner is dan 1000, gebruik dan direct 1000 .

Ref: $slice



  1. Commandoregel-query binnen Java

  2. Oplossen van UnhandledPromiseRejectionWarning in exprespostverzoek

  3. Afwikkeling verwerken voor het niet-bestaande ingesloten document

  4. Retourneer alle velden MongoDB Aggregate