sql >> Base de Datos >  >> NoSQL >> MongoDB

Calcule el producto punto entre dos matrices con MongoDB Aggregate

Suponiendo que ambas matrices tengan la misma longitud, puede usar la siguiente agregación:

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

$range se utiliza para generar una matriz de 4 elementos en este caso (0,1,2,3) y esos se usan como índices para $arrayElemAt operador. $reduce simplemente suma todos los productos para índices particulares que devuelven valor escalar. Hay dos variables especiales usadas en $reduce :$$value representa la suma mientras que $$this representa el índice generado por $range