MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Calcule o produto escalar entre dois arrays com o MongoDB Aggregate


Supondo que ambas as matrizes tenham o mesmo comprimento, você pode usar a agregação abaixo:
db.collection.aggregate([
    {
        $project: {
            dotProduct: {
                $reduce: {
                    input: { $range: [ 0, { $size: "$source" }] },
                    initialValue: 0,
                    in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
                }
            }
        }
    }    
])

$range é usado para gerar um array de 4 elementos neste caso (0,1,2,3) e esses são usados ​​como índices para $arrayElemAt operador. $reduce simplesmente soma todos os produtos para índices específicos que retornam valor escalar. Existem duas variáveis ​​especiais usadas em $reduce :$$value representa a soma enquanto $$this representa o índice gerado por $range