sql >> Base de Datos >  >> NoSQL >> MongoDB

Paginación de MongoDB en matrices:verifique si $ segmento alcanzó el comienzo de la matriz

Una forma de hacerlo es 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 ] }
      }
    }
  ])

Prueba: mongoplayground

Explicación:

Así que la sintaxis de $slice es { $slice: [ <array>, <position>, <n> ] } de eso, si pasa un valor mayor que el tamaño de la matriz para <position> entonces obtendrá una matriz vacía como respuesta.

Aquí estamos usando $cond para enviar condicionalmente cualquier valor de inputPosition o valor de maxNumber a <position> . Además, tengo un valor codificado de maxNumber a 1000 pero, en general, todo depende de su elección:puede usar un número menor, no importa, ese número debe ser un valor mayor que el tamaño de su matriz. También puede size of array + 1 pero en lugar de hacer esa operación, si cree que su matriz siempre es inferior a 1000, use directamente 1000 .

Referencia: $slice