Giả sử cả hai mảng có cùng độ dài, bạn có thể sử dụng tổng hợp dưới đây:
db.collection.aggregate([
{
$project: {
dotProduct: {
$reduce: {
input: { $range: [ 0, { $size: "$source" }] },
initialValue: 0,
in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
}
}
}
}
])
$ range
được sử dụng để tạo một mảng 4 phần tử trong trường hợp này là (0,1,2,3)
và chúng được sử dụng làm chỉ mục cho $ arrayElemAt
nhà điều hành. $ giảm
chỉ đơn giản là tính tổng tất cả các sản phẩm cho các chỉ mục cụ thể trả về giá trị vô hướng. Có hai biến đặc biệt được sử dụng trong $reduce
:$$value
đại diện cho tổng trong khi $$this
đại diện cho chỉ mục được tạo bởi $range