平均值mongodb

时间:2019-01-24 18:57:26

标签: mongodb average

我正在尝试从数据中获取值字段的平均值。 我已嵌套文档。有一些价值。我想从此文档中获取字段“值”的平均值。并想在c#应用程序中使用此值

{
        "_id" : ObjectId("5c49f398fc0078178c76705b"),     // my json data
        "Time_Created" : ISODate("2019-01-24T17:19:20.205Z"),   // date
        "Test_ID" : "1",
        "data" : [
                {
                        "Device_id" : "1",
                        "Total_wires" : "5",
                        "Cables" : [
                                {
                                        "TAG" : "4001",
                                        "Value" : 24.3

                                },
                                {
                                        "TAG" : "4002",
                                        "Value" : 21.3

                                },
                                {
                                        "TAG" : "4003",
                                        "Value" : 21.3

                                },
                                {
                                        "TAG" : "4004",

                                        "Value" : 21.3

                                },                                                            
                                {
                                        "TAG" : "4005",                                        
                                        "Value" : 100.3

                                }
                        ]
                }
        ]
}

db.collection_name.aggregate( [  {$unwind: "$data"}, { $group : { _id : "$data.Cables.Value", avgValue: { $avg : "$data.Cables.Value"} } } ] );

我得到这个结果:

{ "_id" : [  24.3, 21.3, 21.3, 21.3, 100.3 ], "avgValue" : null }

但这是我所期望的

{ "_id" : [  24.3, 21.3, 21.3, 21.3, 100.3 ], "avgValue" : 37.7 }   

37.7是所有值24.321.321.321.3100.3的平均值

2 个答案:

答案 0 :(得分:0)

尝试下面的管道。

[
    { 
        '$project': {
            'values': '$data.Cables.Value',
        }
    }, {
        '$unwind': '$values'
    }, {
        '$addFields': { 'avgValue':
            { '$avg': '$values'}
        }
    }
])

答案 1 :(得分:0)

db.collection_name.aggregate([['$ project':{'values':'$ data.Cables.Value',}},{'$ unwind':'$ values'},{'$ addFields' :{'avgValue':{'$ avg':'$ values'}}}])

运作良好!

但是一个问题是传入值字段是字符串。因此需要某种转换字符串到int然后求平均值