mongodb - 许多文档中的 mongodb 平均数组
问题描述
使用 mongodb,我有一个文档集合,其中每个文档都有一个固定长度的浮点值向量,如下所示:
items = [
{"id": "1", "vec": [1, 2, 0]},
{"id": "2", "vec": [6, 4, 1]},
{"id": "3", "vec": [3, 2, 2]},
]
我想对这些向量进行逐行平均。在这个例子中,我希望结果返回
[ (1 + 6 + 3) / 3, (2 + 4 + 2) / 3, (0 + 1 + 2) / 3 ]
这个答案非常接近我正在寻找的答案,但据我所知,它仅适用于大小为 2 的向量。mongoDB - 数组值的平均值
已经提供了一个对大型阵列来说性能不是很好的答案。对于上下文,我使用 ~700 维向量。
解决方案
这应该有效:https ://mongoplayground.net/p/PKXqmmW31nW
[
{
$group: {
_id: null,
a: {
$push: {
$arrayElemAt: ["$vec", 0]
}
},
b: {
$push: {
$arrayElemAt: ["$vec", 1]
}
},
c: {
$push: {
$arrayElemAt: ["$vec", 2]
}
}
}
},
{
$project: {
a: {
$avg: "$a"
},
b: {
$avg: "$b"
},
c: {
$avg: "$c"
}
}
}
]
哪个输出:
[
{
"_id": null,
"a": 3.3333333333333335,
"b": 2.6666666666666665,
"c": 1
}
]
这是一个没有 $avg 运算符的更有效的方法。我会留下其他答案以供参考。 https://mongoplayground.net/p/rVERc8YjKZv
db.collection.aggregate([
{
$group: {
_id: null,
a: {
$sum: {
$arrayElemAt: ["$vec", 0]
}
},
b: {
$sum: {
$arrayElemAt: ["$vec", 1]
}
},
c: {
$sum: {
$arrayElemAt: ["$vec", 2]
}
},
totalDocuments: {
$sum: 1
}
}
},
{
$project: {
a: {
$divide: ["$a", "$totalDocuments"]
},
b: {
$divide: ["$b", "$totalDocuments"]
},
c: {
$divide: ["$c", "$totalDocuments"]
}
}
}
])
推荐阅读
- excel - 如何在 VBA 中使用 SpecialCells(xlCellTypeVisible) 仅从范围中选择行?
- javascript - 如何部分呈现已转义元素的 HTML
- sql-server - 将日期时间从 csv 批量加载到 SQL Server 时如何修复“批量加载数据转换错误”
- javascript - 是否严格要求调用 IntersectionObserver.unobserve()?
- android - 摄像头意图 WebView android
- ubuntu - NTP 与 GPS 同步
- asp.net-mvc - 如何将复选框选中的值绑定到列表
在视图模型中? - python - 如何列出文件夹并扫描它们
- linux - yum 安装一个包含所有必需依赖包的包
- flutter - Flutter视频播放器没有音频