sql >> Databasteknik >  >> NoSQL >> MongoDB

Beräkna Dot Product mellan två arrayer med MongoDB Aggregate

Förutsatt att båda arrayerna har samma längd kan du använda nedanstå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 används för att generera en array med 4 element i detta fall (0,1,2,3) och de används som index för $arrayElemAt operatör. $reduce summerar helt enkelt alla produkter för särskilda index och returnerar skalärt värde. Det finns två specialvariabler som används i $reduce :$$value representerar summa medan $$this representerar index som genereras av $range




  1. MongoDB $dateToString

  2. MongoDB 2dsphere index misslyckas (felformad geometri?)

  3. Bästa praxis för att uppgradera Redis med Sentinels?

  4. Infoga MongoDB-dokument med React.js