J'ai un rapport existant utilisant le cadre d'agrégation de MongoDB, et j'aimerais y ajouter un nouveau champ - un décompte de tous les documents où l'un des champs numériques est inférieur à une valeur donnée.
Mes documents ont un champ de longueur, dont je calcule déjà la moyenne, donc en plus de cela, j'aimerais que le nombre de documents soit inférieur à un certain nombre.
Mon pipeline d'agrégation actuel est très simple:
db.streams.aggregate([
{ $match: { track_id: "ecb96af4537d4263b83f5675dbcc0388" }},
{ $group: { _id: "$source", listens: { $sum: 1 } } }
])
J'ai essayé d'utiliser $sum
and $lt
, mais le nombre est toujours de 0. Je suppose que c'est parce $sum
que cela ne compte que lorsque 1
est retourné, mais $lt
retourne true
. Voici ce que j'ai essayé:
db.streams.aggregate([{
$match: {
track_id: "ecb96af4537d4263b83f5675dadd0388"
}
}, {
$group: {
_id: "$source",
listens: {
$sum: 1
},
skips: {
$sum: {
$lt: ["$length", 1000]
}
}
}
}, ])
Quelqu'un sait-il comment je peux y parvenir? Merci!
Vous pouvez ajouter une condition imbriquée comme ceci
...
skips: {
$sum: {
$cond: {
if: { $lt: ["$length", 1000]},
then: 1,
else: 0
}
}
}
...
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots