MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie erhalte ich die Dokumente basierend auf Datumsfiltern (Woche, Monat und benutzerdefinierte Daten) in MongoDB?

Möglicherweise haben Sie etwas wie das Folgende. Verwenden Sie zum Herausfiltern eine Übereinstimmungsoperation. In diesem Beispiel habe ich Ihnen die last_week Details gezeigt. Ich habe alle Szenarien, die Sie oben erwähnt haben, überprüft. Und es funktioniert gut

[{$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
    ]
  }
}}]