Средние значения mongodb - PullRequest
       6

Средние значения mongodb

0 голосов
/ 24 января 2019

Я пытаюсь получить среднее значение поля значений из моих данных.У меня есть вложенный документ.С некоторыми ценностями.Я хочу получить среднее значение поля "значение" из этого документа.и хочу использовать это значение в приложении 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

Ответы [ 2 ]

0 голосов
/ 29 января 2019

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

хорошо сработало!

Но одной проблемой является поле входящего значения - строка. Так что нужна какая-то строка преобразования в int, а затем в среднем

0 голосов
/ 25 января 2019

Попробуйте конвейер ниже.

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