MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment obtenir les documents basés sur des filtres de date (semaine, mois et dates personnalisées) dans MongoDB ?

Vous pouvez avoir quelque chose comme suit. Utilisez l'opération de correspondance pour filtrer. Dans cet exemple, je vous ai montré les détails de la semaine dernière. J'ai vérifié tous les scénarios que vous avez mentionnés ci-dessus. Et ça marche bien

[{$match: {
  $expr:{
    $and:[
      {$gt:["$createdAt",new Date(new Date()-14*60*60*24*1000)]},
      {$lt:["$createdAt",new Date(new Date()-7*60*60*24*1000)]}
      ]
  }
}}, {$group: {
  _id: '$userId',
  totalSeen: {
    $sum: {
      $cond: [
        {
          $eq: [
            '$status',
            'seen'
          ]
        },
        1,
        0
      ]
    }
  },
  total: {
    $sum: 1
  }
}}, {$project: {
  _id: 0,
  userId: '$_id',
  notificationPercentage: {
    $multiply: [
      {
        $divide: [
          '$totalSeen',
          '$total'
        ]
      },
      100
    ]
  }
}}]