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

Beregn Dot Product mellem to arrays med MongoDB Aggregate

Forudsat at begge arrays har samme længde, kan du bruge nedenstående aggregering:

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

$range bruges til at generere en matrix af 4 elementer i dette tilfælde (0,1,2,3) og disse bruges som indekser for $arrayElemAt operatør. $reduce summerer simpelthen alle produkter for bestemte indekser og returnerer skalarværdi. Der er to specielle variabler brugt i $reduce :$$value repræsenterer sum mens $$this repræsenterer indeks genereret af $range




  1. c# mongodb driver hvordan man caster en mongo dobbelt værdi til en c# decimal

  2. mongo tæller rækker fra en række leverede data

  3. Latterligt langsom mongoDB-forespørgsel på lille samling i enkel, men stor database

  4. Hvordan kan jeg forespørge mongodb ved hjælp af mongoid/skinner uden timeout?