Tanggal luwak membandingkan tanpa waktu dan Kelompokkan berdasarkan createAt dan staffId dengan Mingguan, bulanan dan Tahunan jumlah staf dihitung dengan agregasi?
Mungkin pertanyaan tersebut terlihat seperti duplikat tapi mohon maaf untuk itu.
Saya ingin mengumpulkan basis hasil mingguan, Bulanan, Tahunan createdAt
tanpa 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
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
createdAt
kolom!