gpt4 book ai didi

mongodb - 计算数组中评分的平均值,然后将字段添加到 MongoDB 中的原始文档

转载 作者:可可西里 更新时间:2023-11-01 09:38:10 24 4
gpt4 key购买 nike

我有一个文档,其中包含一个名为评级的字段。这是一个对象数组,每个对象包含 userId 和 ratingValue

ratings: Array
0: Object
userId: "uidsample1"
ratingValue: 5
1: Object
userId:"uidsample2"
ratingValue:1.5

我想做一个聚合管道来计算更新或添加数组中的一个评级时的新平均值。然后,我想将该值作为一个名为 averageRating 的新字段放入文档中。

我已经尝试展开,然后 $ 添加 $avg 的字段:“ratings.ratingValue”,但它会添加到展开的文档中并且没有得到平均值。它看起来像这样(不完全是因为在罗盘上测试过)

db.test.aggregate{
[
{
$unwind: {
path: "$ratings"
}
},
{
$addFields {
averageRating: {
$avg: "$ratings.ratingValue"
}
}

}
]
}

什么是好的查询结构?

最佳答案

你实际上不需要$unwind$group来计算平均值,这些操作是昂贵的

你可以用 $avg 简单地 $addFields

db.col.aggregate([
{$addFields : {averageRating : {$avg : "$ratings.ratingValue"}}}
])

样本收集与聚合

> db.t62.drop()
true

> db.t62.insert({data : {ratings : [{val : 1}, {val : 2}]}})
WriteResult({ "nInserted" : 1 })

> db.t62.find()
{ "_id" : ObjectId("5c44d9719d56bf65be5ab2e6"), "data" : { "ratings" : [ { "val" : 1 }, { "val" : 2 } ] } }

> db.t62.aggregate([{$addFields : {avg : {$avg : "$data.ratings.val"}}}])
{ "_id" : ObjectId("5c44d9719d56bf65be5ab2e6"), "data" : { "ratings" : [ { "val" : 1 }, { "val" : 2 } ] }, "avg" : 1.5 }

关于mongodb - 计算数组中评分的平均值,然后将字段添加到 MongoDB 中的原始文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270662/

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