MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Berechnen Sie das Skalarprodukt zwischen zwei Arrays mit MongoDB Aggregate

Unter der Annahme, dass beide Arrays die gleiche Länge haben, können Sie die folgende Aggregation verwenden:

db.collection.aggregate([
    {
        $project: {
            dotProduct: {
                $reduce: {
                    input: { $range: [ 0, { $size: "$source" }] },
                    initialValue: 0,
                    in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
                }
            }
        }
    }    
])

$range wird verwendet, um in diesem Fall ein Array aus 4 Elementen zu generieren (0,1,2,3) und diese werden als Indizes für $arrayElemAt verwendet Operator. $reduce summiert einfach alle Produkte für bestimmte Indizes, die einen Skalarwert zurückgeben. Es gibt zwei spezielle Variablen, die in $reduce verwendet werden :$$value stellt die Summe dar, während $$this stellt einen von $range generierten Index dar