GroupBy дата + mongodb - PullRequest
       8

GroupBy дата + mongodb

0 голосов
/ 08 октября 2018

Я должен агрегировать результат по месяцу данного документа.Рассмотрим в качестве моего документа следующее:

{
    "_id" : ObjectId("5b3314a12b05b1b247366f48"),
    "email" : "abc@gmail.com",
    "qwerty":[{
            "id" : "5ba4ebbad1b5eaf038841302",
            "status" : "inprogress",           
            "Date" : "2018-08-20"
        }, 
        {
            "id" : "5ba4ebbad1b5eaf038841303",
            "status" : "inprogress",           
            "Date" : "2018-08-20"
        }]

Вот мой запрос:

var query =[
        { $match: {"email":email} },
        {$unwind: "$courses" },
        {$group:{_id:{$substrCP: ["$qwerty.Date", 5, 2]},count:{$sum:1}}}
    ];

Он работает правильно.Но я $substrCP: ["$qwerty.Date", 5, 2] основан на формате даты "2018-08-20", что если "20-08-2018" ??Таким образом, можно изменить приведенный выше запрос, чтобы он соответствовал типу nay.

Также я попытался с новым Date("").getMonth(), но он отображается как "NaN", я узнал, что его нельзя использовать внутри группы.

Пожалуйста, предложите свои идеи.

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете использовать $ month в сочетании с $ dateFromString , чтобы получить то, что вам нужно:

db.collection.aggregate([
  {
    $match: {
      "email": "abc@gmail.com"
    }
  },
  {
    $unwind: "$qwerty"
  },
  {
    $group: {
      _id: {
        $month: {
          $dateFromString: {
            dateString: "$qwerty.Date"
          }
        }
      },
      count: {
        $sum: 1
      }
    }
  }
])

Вы можете увидеть его здесь с двумя разными форматами даты.

Для группировки по дате вы можете сделать то же самое без $month:

db.collection.aggregate([
  {
    $match: {
      "email": "abc@gmail.com"
    }
  },
  {
    $unwind: "$qwerty"
  },
  {
    $group: {
      _id: {
        $dateFromString: {
          dateString: "$qwerty.Date"
        }
      },
      count: {
        $sum: 1
      }
    }
  }
])

См. Эту версию здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...