Tanggal luwak membandingkan tanpa waktu dan Kelompokkan berdasarkan createAt dan staffId dengan Mingguan, bulanan dan Tahunan jumlah staf dihitung dengan agregasi?

Dec 14 2020

Mungkin pertanyaan tersebut terlihat seperti duplikat tapi mohon maaf untuk itu.

Saya ingin mengumpulkan basis hasil mingguan, Bulanan, Tahunan createdAttanpa waktu dan staffId.

Modelnya seperti di bawah ini:

   {
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dp"),
    "staffId" : 12345,
    "category" : "trend",
    "page_route" : "http://example.com/rer",
    "expireAt" : ISODate("2020-08-13T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5de"),
    "staffId" : 12346,
    "category" : "incident",
    "page_route" : "http://example.com/rergfhfhf",
    "expireAt" : ISODate("2020-08-14T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-08T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dc"),
    "staffId" : 12347,
    "category" : "trend",
    "page_route" : "http://example.com/rerrwe",
    "expireAt" : ISODate("2020-08-13T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dr"),
    "staffId" : 12348,
    "category" : "trend",
    "page_route" : "http://example.com/rerrwe",
    "expireAt" : ISODate("2020-08-12T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-08T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "__v" : 0
}

Hasil yang diharapkan: Contoh 1) Mingguan

[
{_id: "2020-11-13", total: 2},
{_id: "2020-11-8", total: 2},


]

Contoh 2) Bulanan

[
{_id: "2020-11-8", total: 4},

]

Demikian pula untuk tahunan ...

Saya menggunakan nodejs dan mongoose untuk mengimplementasikan API .

Saya berjuang keras tetapi saya tidak dapat mencapai hasil yang diharapkan.

jika ada yang membantu saya maka itu akan sangat membantu.

Terima kasih untuk semua Pakar.

Saya telah mencoba sesuatu seperti ini:

[
        {
          $match: { createdAt: { $gte: new Date(currentDate), $lt: new Date(nextDate) } } }, { $project: {
            _id: 1,
            staffId: 1,
            day: {
              $dayOfMonth: "$createdAt"
            },
            month: {
              $month: "$createdAt"
            },
            year: {
              $year: "$createdAt"
            }
          }
        },
        {
          $project: { _id: 1, staffId: 1, datetime: { $concat: [
                {
                  $substr: ["$year", 0, 4]
                },
                "-",
                {
                  $substr: ["$month", 0, 2]
                },
                "-",
                {
                  $substr: ["$day", 0, 2]
                }
              ]
            }
          }
        },
        {
          $group: { _id: { createdAt: "$datetime",
              staffId: "$staffId" } } }, { $group: {
            _id: {$week:"$_id.createdAt"},
            total: {
              $sum: 1 } } }, { $sort: { _id: 1 } }
      ];

Jawaban

3 turivishal Dec 14 2020 at 15:47

Anda dapat mencoba,

  • Kelompokkan menurut minggu
db.collection.aggregate([
  {
    $group: { _id: { year: { $year: "$createdAt" }, week: { $week: "$createdAt" } }, createdAt: { $first: "$createdAt" }, count: { $sum: 1 }
    }
  }
])

Tempat bermain

  • Kelompokkan berdasarkan bulan
db.collection.aggregate([
  {
    $group: { _id: { year: { $year: "$createdAt" }, month: { $month: "$createdAt" } }, createdAt: { $first: "$createdAt" }, count: { $sum: 1 }
    }
  }
])

Tempat bermain

  • Kelompokkan menurut tahun
db.collection.aggregate([
  {
    $group: { _id: { $year: "$createdAt" }, createdAt: { $first: "$createdAt" }, count: { $sum: 1 }
    }
  }
])

Tempat bermain

Anda dapat mengubah format tanggal dari bahasa sisi klien Anda menggunakan createdAtkolom!