sql >> Databáze >  >> NoSQL >> MongoDB

Stránkování MongoDB na polích – Zkontrolujte, zda $slice dosáhl začátku pole

Jedním ze způsobů je použít $cond operátor :

Dotaz:

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

Vysvětlení:

Takže syntaxe $slice je { $slice:[ , , ] } z toho, pokud předáte hodnotu větší než velikost pole pro pak jako odpověď dostanete prázdné pole.

Zde používáme $cond pro podmíněné odeslání jedné z hodnot inputPosition nebo hodnotu maxNumber na . Navíc mám pevně zakódovanou hodnotu maxNumber na 1000 ale obecně vše závisí na vaší volbě - Můžete použít menší číslo, na tom nezáleží, toto číslo by mělo být větší hodnotou než velikost vašeho pole, Můžete také velikost pole + 1 ale místo provedení této operace, pokud se domníváte, že vaše pole je vždy menší než 1000, použijte přímo 1000 .

Odkaz: $slice



  1. sql „jako“ operace s čísly v mongodb

  2. Objekt kolekce není volatelná chyba s PyMongo

  3. MongoDB agregační rámec $subtract

  4. Proč se KEYS nedoporučuje používat v Redis?