我有以下格式的文档:
{
'_id': ObjectId('5a7884437443cfd470893efc'),
'source': [1,2,3,3]
'sink': [5,6,7,8]
}
如何使用聚合管道计算源数组和接收器数组(向量)之间的点积
最佳答案
假设两个数组具有相同的长度,您可以使用以下聚合:
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 的索引运算符(operator)。 $reduce只是对返回标量值的特定索引的所有乘积求和。 $reduce
中使用了两个特殊变量:$$value
表示 sum,而 $$this
表示 $range< 生成的索引
关于mongodb - 使用 MongoDB Aggregate 计算两个数组之间的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394051/