我正在尝试从数据中获取值字段的平均值。 我已嵌套文档。有一些价值。我想从此文档中获取字段“值”的平均值。并想在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.3
,21.3
,21.3
,21.3
和100.3
的平均值
答案 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然后求平均值