gpt4 book ai didi

mongodb 跨多个文档的平均数组

转载 作者:行者123 更新时间:2023-12-04 09:22:08 25 4
gpt4 key购买 nike

使用 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 - average on array values
已经提供了一个对于大型阵列性能不是很好的答案。对于上下文,我使用了 ~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"]
}
}
}
])

关于mongodb 跨多个文档的平均数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63081706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com