MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB страниране на масиви - Проверете дали $slice е достигнало началото на масива

Един от начините е да използвате $cond оператор :

Запитване:

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

Тест: mongoplayground

Обяснение:

Така че синтаксисът на $slice е { $slice:[ , , ] } от това, ако подадете стойност, по-голяма от размера на масива за тогава ще получите празен масив в отговор.

Тук използваме $cond за условно изпращане на стойност на inputPosition или стойност на maxNumber към <позиция> . Освен това имам твърдо кодирана стойност maxNumber до 1000 но като цяло всичко зависи от вашия избор - можете да използвате по-малко число, няма значение, това число трябва да е по-голяма от размера на вашия масив, можете също да размер на масива + 1 но вместо да извършвате тази операция, ако смятате, че вашият масив винаги е по-малък от 1000, тогава директно използвайте 1000 .

Справка: $slice



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да създадете DB за MongoDB контейнер при стартиране?

  2. Издърпайте и добавете задаване едновременно с монго

  3. Как да конвертирате милисекунди в дата в агрегирането на mongodb?

  4. Не може да се създаде директория MongoDB /data/db на macOS Catalina

  5. Получаване на задължителни полета от Document в mongoengine?