En supposant que les deux tableaux ont la même longueur, vous pouvez utiliser l'agrégation ci-dessous :
db.collection.aggregate([
{
$project: {
dotProduct: {
$reduce: {
input: { $range: [ 0, { $size: "$source" }] },
initialValue: 0,
in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
}
}
}
}
])
$range
est utilisé pour générer un tableau de 4 éléments dans ce cas (0,1,2,3)
et ceux-ci sont utilisés comme index pour $arrayElemAt
opérateur. $reduce
additionne simplement tous les produits pour des index particuliers renvoyant une valeur scalaire. Il y a deux variables spéciales utilisées dans $reduce
:$$value
représente la somme tandis que $$this
représente l'index généré par $range