如何通過一些預定義的條件對聚合 mongoose 中的資料進行分組,資料將根據以下 3 個條件進行分組:< 5 小時、5-9 小時、>9 小時。
按 timeworkDay 分組的資料。timeWorkDay資料小于5,分組到timework5,大于5,小于9,分組到timework59,大于9,資料分組按時間分組9
樣本資料
const data = [
{
"_id": "620f3f7a2148a8227855068f",
"timeWorkDay": 8,
"created_at": "2022-02-18T06:40:58.932Z",
"updated_at": "2022-02-18T07:54:59.331Z",
"__v": 0,
},
{
"_id": "6201e0e52faf8f0228dfad27",
"created_at": "2022-02-08T03:17:57.018Z",
"updated_at": "2022-02-08T03:17:57.018Z",
"__v": 0,
"timeWorkDay": 12,
},
{
"_id": "61f21be553b6de54a8ef4e0b",
"id_company": "61e00d1a144fa470f1870154",
"created_at": "2022-02-03T02:48:57.006Z",
"updated_at": "2022-02-01T02:04:29.778Z",
"__v": 0,
"timeWorkDay": 14,
},
{
"_id": "61fb45647dda6444afd10e2e",
"created_at": "2022-02-03T02:48:57.006Z",
"updated_at": "2022-02-22T08:10:39.775Z",
"__v": "2022-02-06T17:00:00.000Z",
"timeWorkDay": 5,
},
More...
]
和預期資料
const result = [
timeWork5:[
{
"_id": "61fb45647dda6444afd10e2e",
"created_at": "2022-02-03T02:48:57.006Z",
"updated_at": "2022-02-22T08:10:39.775Z",
"__v": "2022-02-06T17:00:00.000Z",
"timeWorkDay": 5,
},
More...
],
timeWork59: [
{
"_id": "620f3f7a2148a8227855068f",
"timeWorkDay": 8,
"created_at": "2022-02-18T06:40:58.932Z",
"updated_at": "2022-02-18T07:54:59.331Z",
"__v": 0,
},
More...
],
timeWork9: [
{
"_id": "6201e0e52faf8f0228dfad27",
"created_at": "2022-02-08T03:17:57.018Z",
"updated_at": "2022-02-08T03:17:57.018Z",
"__v": 0,
"timeWorkDay": 12,
},
{
"_id": "61f21be553b6de54a8ef4e0b",
"id_company": "61e00d1a144fa470f1870154",
"created_at": "2022-02-03T02:48:57.006Z",
"updated_at": "2022-02-01T02:04:29.778Z",
"__v": 0,
"timeWorkDay": 14,
},
More...
],
]
我嘗試了幾種方法,但沒有得到我預期的結果
const execQuery: any = await EmployeeModel.aggregate([
{
$group: {
_id: {
timeWorkDay5: {
$cond: [
{$lte: ["$timeWorkDay", 4]}
]
},
timeWorkDay9: {
$cond: [
{$gte: ["$timeWorkDay", 7]}
]
},
},
createdAt: { $first: "$joinDate" },
count: { $sum: 1 }
}
},
{ $sort: { joinDate: -1 } }
]);
uj5u.com熱心網友回復:
認為$facet符合您的要求。
const execQuery: any = await EmployeeModel.aggregate([
{
$facet: {
timeWorkDay5: [
{
$match: {
$expr: {
$lte: [
"$timeWorkDay",
4
]
}
}
}
],
timeWorkDay59: [
{
$match: {
$expr: {
$and: [
{
$gte: [
"$timeWorkDay",
5
]
},
{
$lt: [
"$timeWorkDay",
9
]
}
]
}
}
}
],
timeWorkDay9: [
{
$match: {
$expr: {
$gte: [
"$timeWorkDay",
9
]
}
}
}
]
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/437027.html
上一篇:發送發布請求時出現重復密鑰錯誤
