MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Calcola Dot Product tra due array con MongoDB Aggregate

Supponendo che entrambi gli array abbiano la stessa lunghezza, puoi utilizzare l'aggregazione di seguito:

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

$range viene utilizzato per generare un array di 4 elementi in questo caso (0,1,2,3) e quelli sono usati come indici per $arrayElemAt operatore. $reduce somma semplicemente tutti i prodotti per indici particolari restituendo un valore scalare. Ci sono due variabili speciali usate in $reduce :$$value rappresenta la somma mentre $$this rappresenta l'indice generato da $range