Группа Mongodb по диапазону дат и идентификаторов

#mongodb

#mongodb

Вопрос:

У меня есть база данных

   {
    "_id": "222jMQDEHuHXTuDeF",
    "customer_id": "QfdAFubKS9ytdbhbq",
    "createdDate": {
        "$date": "2020-07-27T08:19:40.791Z"
    } 
  }, 
  {
    "_id": "278jKLDEHuHXItDeF",
    "customer_id": "HtdAFubJS8ytdnjbe",
    "createdDate": {
        "$date": "2020-07-26T08:19:40.791Z"
    } 
   }, 
   {
    "_id": "128lRLDEHuHXItPhy",
    "customer_id": "KodATubJS8yyqkjbe",
    "createdDate": {
        "$date": "2020-07-25T08:19:40.791Z"
    } 
   }
  

Мне нужно получить данные за предыдущую неделю, где текущая дата является датой окончания, и сгруппировать по дате и customer_id и получить количество customer_id в mongodb.

Комментарии:

1. Если ваш ответ поможет вам, пожалуйста, отметьте и проголосуйте за, чтобы помочь людям, которые задают вопросы такого рода

Ответ №1:

Вы можете сравнить следующим образом. Для простоты я добавил previouseWeekStart , но вы можете напрямую вызывать ее внутри $match сцены вместо использования $addFields . Это определенно должно сработать, но я не могу показать демо в mongoplayground, поскольку я добавил символ вычитания ( - ) для вычисления предыдущей даты.

 db.collection.aggregate([
  {
    $addFields: {
      previouseWeekStart: new Date(new Date()-7*60*60*24*1000)
    }
  },
  {
    $match: {
      $expr: {
        $and: [
          {
            $gt: [
              "$createdDate",
              "$previouseWeekStart"
            ]
          },
          {
            $lt: [
              "$createdDate",
              new Date()
            ]
          }
        ]
      }
    }
  },
  {
    $group: {
      _id: {
        cusId: "$customer_id",
        date: "$createdDate"
      },
      count: {
        $sum: 1
      }
    }
  }
])