【发布时间】:2020-12-25 00:53:51
【问题描述】:
我正在创建用于学习的小型考勤系统,
我有两个收藏:
员工:
{
"id": "5f474ebb12a55e2a1c4fb39f"
"emp_status": true,
"logAttendance": true,
"createdAt": "2020-08-27T06:09:31.533Z",
"empId": "10000",
"firstName": "firstName",
"lastName": "lastName",
"gender": "male",
"dob": "2020-07-11T08:53:20.691Z",
"email": "abcd@abcd.com",
"department": {
"_id": "5f2f8599e5f4c015e4827c3f",
"departmentName": "department",
"organizationName": "department ",
},
"designation": {
"_id": "5f2f85b2e5f4c015e4827c42",
"designationName": "designation "
},
.
.
.
}
出席:
{
"_id": "5f4a05bb09f14077c82157bb",
"empId": "10000",
"employee": "5f474ebb12a55e2a1c4fb39f"
"weekOff": false,
"dated": "2020-08-29T07:37:31.525Z",
"inTime": "2020-08-29T04:30:08.000Z",
"outTime": "2020-08-30T15:30:25.000Z"
} .... x 30 days x 100 employees
我希望它按“员工”(即员工集合中的 ObjectId)对它们进行分组,并使用 firstName lastName 填充员工。
我尝试了什么:
const stats = await Attendance.aggregate([
{
$group: {
_id: "$employee",
attendance: {
$push: {
dated: "$dated",
weekOff: "$weekOff",
present: "$present,
inTime: "$inTime",
outTime: "$outTime",
},
},
},
},
{
$lookup: {
from: "Employee", // " module.exports = Employee " from employee Schema;
localField: "employee",
foreignField: "_id",
as: "employeeData",
},
},
]);
结果:
[{
"_id": "5f474ebb12a55e2a1c4fb39f", // this Id suppose to be populated with employee data
// which is not Working.
"attendance": [
{
"dated": "2020-08-01T07:37:31.546Z", // 01-08-2020
"weekOff": false,
"inTime": "2020-08-01T08:00:08.131Z",
"outTime": "2020-08-01T13:39:31.543Z",
},
{
"dated": "2020-08-02T20:44:04.245Z", // 02-08-2020
"weekOff": false,
"inTime": "2020-08-02T04:16:16.670Z",
"outTime": "2020-08-02T14:27:04.529Z",
},
....
},
{
"_id": "5f474efe12a5256g1c4fb3ee",
"attendance": [
{
"dated": "2020-08-01T07:37:31.546Z", // 01-08-2020
"weekOff": false,
"inTime": "2020-08-01T08:00:08.131Z",
"outTime": "2020-08-01T13:39:31.543Z",
},
{
"dated": "2020-08-02T20:44:04.245Z" ,// 02-08-2020
"weekOff": false,
"inTime": "2020-08-02T04:16:16.670Z",
"outTime": "2020-08-02T14:27:04.529Z",
},
....
},
......
]
"_id": "5f474efe12a5256g1c4fb3ee",
【问题讨论】:
-
您确定您的 Ateendand.employee 字段是 ObjectId 而不是字符串?否则你必须先改造它。
标签: javascript node.js mongodb mongoose aggregation-framework