MongoDB:对文档中的值求和

3

我正在使用MongoDB和C#制作应用程序。我使用了MongoDB驱动程序。

{
     _id: ObjectId("5099803df3f4948bd2f98391"),
     Title: "Test",
     Rating: {
          1234 : 4.0,
          4689 : 2.5,
          1987 : 1.5
     }
}

现在我想获得平均评分。所以 (4.0+2.5+1.5) / 3。 但是如何使用MongoDB和C#驱动程序实现呢? 我尝试了unwind然后计数,但是没有成功。
1个回答

0

您可以使用$objectToArray(从Mongo版本3.4.4开始)将对象转换为数组并计算$avg

db.t71.aggregate([
    {$addFields : {data : {$objectToArray : "$Rating"}}}, 
    {$addFields : {avg : {$avg : "$data.v"}}}
]).pretty()

聚合

> db.t71.aggregate([{$addFields : {data : {$objectToArray : "$Rating"}}}, {$addFields : {avg : {$avg : "$data.v"}}}]).pretty()
{
        "_id" : 1,
        "Title" : "Test",
        "Rating" : {
                "1234" : 4,
                "1987" : 1.5,
                "4689" : 2.5
        },
        "data" : [
                {
                        "k" : "1234",
                        "v" : 4
                },
                {
                        "k" : "1987",
                        "v" : 1.5
                },
                {
                        "k" : "4689",
                        "v" : 2.5
                }
        ],
        "avg" : 2.6666666666666665
}

我很难理解如何在C#中使用MongodB驱动程序完成这个任务。因为AddFields在C#中不可用。 - Barry The Wizard
你使用的MongoDB和C#驱动程序版本是什么? - Saravana
MongoDB 驱动程序版本为 2.7.2。 - Barry The Wizard
你可以尝试使用 $project 而不是 $addFields - Saravana
是的,项目可用。 - Barry The Wizard
这段代码可能无法与C# mongo驱动程序配合使用。 - Naga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接