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