MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Paginação do MongoDB em arrays - Verifique se $slice atingiu o início do array


Uma maneira de fazer é usar $cond operador:

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

Teste: mongoplayground

Explicação:

Portanto, a sintaxe de $slice é { $slice:[ , , ] } a partir disso, se você passar um valor maior que o tamanho do array para então você receberá uma matriz vazia em resposta.

Aqui estamos usando $cond para enviar condicionalmente qualquer valor de inputPosition ou valor de maxNumber para . Além disso, tenho um valor codificado de maxNumber para 1000 mas em geral tudo depende da sua escolha - Você pode usar um número menor, não importa, esse número deve ser um valor maior que o tamanho do seu array, Você também pode size of array + 1 mas em vez de fazer essa operação, se você acredita que sua matriz é sempre menor que 1000, use diretamente 1000 .

Referência: $slice