MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Podział na strony MongoDB w tablicach — Sprawdź, czy $slice osiągnął początek tablicy

Jednym ze sposobów jest użycie $cond operator :

Zapytanie:

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

Wyjaśnienie:

Więc składnia $slice to { $slice:[ , , ] } z tego, jeśli przekażesz wartość większą niż rozmiar tablicy dla w odpowiedzi otrzymasz pustą tablicę.

Tutaj używamy $cond aby warunkowo wysłać dowolną wartość inputPosition lub wartość maxNumber do . Dodatkowo mam zakodowaną wartość maxNumber do 1000 ale generalnie wszystko zależy od twojego wyboru - możesz użyć mniejszej liczby, nie ma znaczenia, ta liczba powinna być większą wartością niż rozmiar twojej tablicy, możesz także rozmiar tablicy + 1 ale zamiast wykonywać tę operację, jeśli uważasz, że twoja tablica jest zawsze mniejsza niż 1000, użyj bezpośrednio 1000 .

Ref.: $slice



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wstaw do silnie zagnieżdżonego dokumentu MongoDB

  2. Dodaj nowy Validator do istniejącej kolekcji

  3. liczba mongodb vs znajdowanie z liczbą

  4. mongodb:jak debugować mapę/redukować w powłoce mongodb

  5. $expr arrayElementAt nie działa w agregacji dla osadzonego dokumentu