sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB paginering på arrayer - Kontrollera om $slice nådde början av arrayen

Ett sätt att göra är att använda $cond operatör :

Fråga:

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

Förklaring:

Så syntax för $slice är { $slice:[ , , ] } från det om du skickar ett värde som är större än storleken på arrayen för då får du en tom array som svar.

Här använder vi $cond för att villkorligt skicka endera värdet av inputPosition eller värdet på maxNumber till . Dessutom har jag ett hårdkodat värde på maxNumber till 1000 men i allmänhet beror allt på ditt val - Du kan använda ett lägre antal, det spelar ingen roll, det numret bör vara ett större värde än storleken på din array, Du kan också storleken på arrayen + 1 men istället för att göra den operationen om du tror att din array alltid är mindre än 1000 så använd direkt 1000 .

Ref : $slice



  1. Mongoose - Samma schema för olika samlingar i (MongoDB)

  2. Välj stränglängd i mongodb

  3. Tredje argumentet när man skapar modell i MongooseJS

  4. Användningsfall för updateOne över findOneAndUpdate i MongoDB