MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Calculer le produit scalaire entre deux tableaux avec MongoDB Aggregate

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