如何将集合猫鼬的数据按一定的条件分组,按以下3种条件分组:<5小时、5~9小时、>9小时。
按timeworkDay分组的数据。如果timeWorkDay数据小于5,它将被分组为timework5,如果数据大于5,小于9,则数据将分组为timework59,如果大于9,则将数据分组为timework9。
样本数据
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 } }
]);发布于 2022-03-02 09:50:24
认为$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
]
}
}
}
]
}
}
])https://stackoverflow.com/questions/71320443
复制相似问题