{
"_id" : ObjectId("5f92b9efb7895affcd55ab8c"),
"active" : true,
"assetData" : {
    "asset1" : {
        "average" : 4,
        "count" : 2,
        "dataPerHour" : {
            "0" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            },
            "1" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            },
            "2" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            }
        },
        "max" : 0,
        "min" : 0
    },
    "asset2" : {
        "average" : 0,
        "count" : 0,
        "dataPerHour" : {
            "0" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            },
            "1" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            },
            "2" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            }
        },
        "max" : 0,
        "min" : 0
    },
    "asset3" : {
        "average" : 0,
        "count" : 0,
        "dataPerHour" : {
            "0" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            },
            "1" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            },
            "2" : {
                "average" : 0,
                "count" : 0,
                "max" : 0,
                "min" : 0,
                "values" : [ 
                    {
                        "time" : "2020-10-23T11:08:38.928Z",
                        "value" : 0
                    }
                ]
            }
        },
        "max" : 0,
        "min" : 0
    }
},
"average" : 4,
"count" : 2,
"date" : "2020-10-23T11:08:38.928Z",
"id" : "string",
"max" : 0,
"min" : 0,
"parameterId" : "string",
"parameterName" : "string",
"parameterValue" : 0,
"serviceId" : "string"

} ** Zakładamy, że mamy wiele danych w tym formacie

I musimy znaleźć średnią ze wszystkich średnich obecnych średnich aktywów.

Musimy znaleźć średnie średnie zgodnie z formułami (po filtrowaniu ... jak potrzebuję średniej tylko aktywów1):

(Średnia1count1) + (Avarge2count2) + (średnia3 * Count3) / (Count1 + Count2 + Count3) **

1
PRAMOD KUMAR 27 październik 2020, 20:57

1 odpowiedź

Najlepsza odpowiedź

Możesz użyć następującego zapytania:

db.collection.aggregate([
  {
    "$group": {
      "_id": null,
      "data": {
        "$push": "$assetData.asset1"
      }
    }
  },
  {
    "$project": {
      "average": {
        "$divide": [
          {
            "$reduce": {
              "input": "$data",
              "initialValue": 0,
              "in": {
                "$add": [
                  "$$value",
                  {
                    "$multiply": [
                      "$$this.count",
                      "$$this.average"
                    ]
                  }
                ]
              }
            }
          },
          {
            $reduce: {
              input: "$data",
              initialValue: 0,
              in: {
                "$add": [
                  "$$value",
                  "$$this.count"
                ]
              }
            }
          }
        ]
      }
    }
  }
])

Plac zabaw MongoDB

0
Tiya Jose 28 październik 2020, 09:13