Как добавить две коллекции с одной агрегацией - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в MongoDb и был бы признателен за помощь в этом вопросе. Я написал следующий конвейер агрегации. Я написал запрос из collection1, я получил выходные данные («Обычная энергия»: 0,0036) и написал запрос collection2, я получил выходные данные (LastMonthConsump »: 2.08), но как добавить две коллекции с одной агрегацией с помощью (LastMonthConsuming»: 2.08 * Обычная энергия ": 0,0036 / Обычная энергия": 0,0036) это мой требуемый результат

У меня есть эти данные в mongodb:

COLLECTION 1:DATA
{
    "slcId" : "51",
    "clientId" : "1",
    "dcuId" : "1",
    "type" : "L",
    "officeId" : "200-24",
    "lampStatus" : "OFF",
    "cummulativeKWH" : 133.7,
    "powerFactor" : 1.0,
    "createDate" : ISODate("2018-09-06T00:01:34.816Z")
},
{
    "slcId" : "52",
    "clientId" : "1",
    "dcuId" : "1",
    "type" : "L",
    "officeId" : "200-24",
    "lampStatus" : "OFF",
    "cummulativeKWH" : 133.7,
    "powerFactor" : 1.0,
    "createDate" : ISODate("2018-09-07T21:01:34.816Z")
}
COLLECTION2:DATA
{
    "_class" : "MongoStreetLightMonthlyVo",
    "timeId" : ISODate("2018-08-04T16:40:08.817Z"),
    "vendor" : "CIMCON",
    "slcId" : "123450",
    "mongoStreetLightChildVo" : {
        "totalConsumptionMtd" : 2.08,
        "prevConsumptionMtd" : 3.45,
        "perChargeKWH" : 9.85,

    }
},
{
    "_class" : "MongoStreetLightMonthlyVo",
    "timeId" : ISODate("2018-09-04T16:40:08.817Z"),
    "vendor" : "CIMCON",
    "slcId" : "123450",
    "mongoStreetLightChildVo" : {
        "totalConsumptionMtd" : 2.08,
        "prevConsumptionMtd" : 3.45,
        "perChargeKWH" : 9.85,

    }
}

Collection1:

db.collection1.aggregate([

               { $match:{"type" : "L"}},
                {
                 $count: "TOTAL_Lights"
                },
                { "$project": { 
                  "Conventional Energy": {
                 "$divide": [ 
               { "$multiply": [
               { "$multiply": [ "$TOTAL_Lights" ,0.12 ] },

                 ]},
              1000
              ]
            } 
         }},

       ])

выход: {"Обычная энергия": 0,0036}

Collection2:

    db.collection2.aggregate(
    [
    // Stage 1
    {
        $group: {
         _id:{year:{$year:"$timeId"},month:{$month:"$timeId"} },
         LastMonthConsumption  : {$sum:"$mongoStreetLightChildVo.totalConsumptionMtd"}, 

        }
    },
    {
        $redact: {
          $cond: {  if: { $and:[
            {$eq: [ "$_id.year", {$year:new Date()} ]}, 
            {$eq: [-1, {$subtract:[ "$_id.month", {$month:new Date()} ]}]}
            ]},
                  then: "$$KEEP",
                  else: "$$PRUNE"
          }
        }
    },
    {$project:{
        _id:0,
        LastMonthConsumption :1

    }
}

]
);

выход: { "LastMonthConsulation": 2.08 }

Ожидаемый результат:

LastMonthConsumption - Conventional Energy/Conventional Energy*100

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете попробовать ниже агрегации

db.collection2.aggregate([
  { "$group": {
    "_id": { "year": { "$year": "$timeId" }, "month": { "$month": "$timeId" }},
    "LastMonthConsumption": { "$sum": "$mongoStreetLightChildVo.totalConsumptionMtd" }
  }},
  { "$redact": {
    "$cond": {
      "if": {
        "$and": [
          { "$eq": ["$_id.year", { "$year": new Date() }] },
          { "$eq": [-1, { "$subtract": ["$_id.month", { "$month": new Date() }] }]
          }
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }},
  { "$lookup": {
    "from": "collection1",
    "pipeline": [
      { "$match": { "type": "L" } },
      { "$count": "TOTAL_Lights" },
      { "$project": {
        "ConventionalEnergy": {
          "$divide": [{ "$multiply": [{ "$multiply": ["$TOTAL_Lights", 0.12] }] }, 1000]
        }
      }}
    ],
    "as": "ConventionalEnergy"
  }},
  { "$project": {
    "_id": 0,
    "totalConsumption": {
      "$multiply": [
        {
          "$divide": [
            {
              "$subtract": [
                "$LastMonthConsumption",
                { "$arrayElemAt": ["$ConventionalEnergy.ConventionalEnergy", 0] }
              ]
            },
            { "$arrayElemAt": ["$ConventionalEnergy.ConventionalEnergy", 0] }         
          ]
        },
        100
      ]
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...