Получение результатов Mongo только за прошлый месяц по умолчанию - PullRequest
0 голосов
/ 04 сентября 2018

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

 [
{

    "CreateDate" : ISODate("2018-08-08T04:53:51.840Z"),
    "cummulativeKWH" : 368.5,
     "frequency" : "50.12"
},
{

    "CreateDate" : ISODate("2018-08-08T04:53:51.840Z"),
    "cummulativeKWH" : 369.5,
     "frequency" : "50.12"
},
{

    "CreateDate" : ISODate("2018-09-03T04:53:51.840Z"),
    "cummulativeKWH" : 369.5,
     "frequency" : "50.12"
},
]

Я новичок в MongoDb и был бы признателен за помощь в этом вопросе. Я написал следующий конвейер агрегации. Мне нужно взять среднее значение cummulativeKWH за предыдущий месяц, только я использую методы фильтрации и выбранные даты. Как получить среднее значение cummulativeKWH за последний предыдущий месяц (например, с 1 августа по 31 августа) только по умолчанию без выбора и без фильтров.
Кто-нибудь, пожалуйста, предложите мне.

 db.collection.aggregate([
  { "$match": {
    'createDate': {'$gte':ISODate("2018-08-01"), '$lte':ISODate("2018-08-31") } 
  }},
  {$group: {_id:null,
   cummulative: {$avg:"$cummulativeKWH"}
}}
])

Я пытаюсь выполнить агрегацию. Я получил вывод, но как получить без выбора даты и без фильтров, как получить среднее значение данных за предыдущий месяц по умолчанию.

1 Ответ

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

Начиная с версии 3.6

Вы должны извлечь год и месяц из вашей даты. попробуйте ниже агрегации

db['02'].aggregate(
    [
        // Stage 1
        {
            $match: {
                $expr: {$and:[
                  {$eq:[{$year:"$CreateDate"},{$year:new Date()}]},
                  {$eq:[1,{$subtract:[{$month:new Date()},{$month:"$CreateDate"}]}]},  
                ]}
            }
        },

        // Stage 2
        {
            $group: {
            _id:{year:{$year:"$CreateDate"},month:{$month:"$CreateDate"}},
                    avg : {$avg:"$cummulativeKWH"}

            }
        },
    ],
);

До версии 3.6 Вы можете использовать $ redact stage:

дб ['02' ]. Агрегатный (

// Pipeline
[
    // Stage 1
    {
        $group: {
        _id:{year:{$year:"$CreateDate"},month:{$month:"$CreateDate"}},
                avg : {$avg:"$cummulativeKWH"},       
        }
    },

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

);

Результат:

{ 
    "_id" : {
        "year" : NumberInt(2018), 
        "month" : NumberInt(8)
    }, 
    "avg" : 369.0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...