両方の配列の長さが同じであると仮定すると、以下の集計を使用できます。
db.collection.aggregate([
{
$project: {
dotProduct: {
$reduce: {
input: { $range: [ 0, { $size: "$source" }] },
initialValue: 0,
in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
}
}
}
}
])
$ range
この場合、4つの要素の配列を生成するために使用されます(0,1,2,3)
これらは、 $arrayElemAt
のインデックスとして使用されます。 オペレーター。 $ reduce
スカラー値を返す特定のインデックスのすべての積を単純に合計します。 $reduce
で使用される2つの特別な変数があります :$$value
$$this
が合計を表す $range
によって生成されたインデックスを表します