我正在开发一个沙龙预订系统。沙龙有多个员工,每个员工都有自己的班次。(我因为午休而休息,如果不对劲,请告诉我你的想法,谢谢)
shift: [
{
id: 1,
day: 'Mon',
status: true,
shift: [
{startTime: '08:00 am', endTime: '01:00 pm'},
{startTime: '02:00 pm', endTime: '05:00 pm'},
],
},
{
id: 2,
day: 'Tue',
status: true,
shift: [
{startTime: '08:00 am', endTime: '01:00 pm'},
{startTime: '02:00 pm', endTime: '05:00 pm'},
],
},
{
id: 3,
day: 'Wed',
status: true,
},
{
id: 4,
day: 'Thu',
status: true,
shift: [
{startTime: '08:00 am', endTime: '01:00 pm'},
{startTime: '02:00 pm', endTime: '05:00 pm'},
],
},
{
id: 5,
day: 'Fri',
status: true,
shift: [
{startTime: '08:00 am', endTime: '01:00 pm'},
{startTime: '02:00 pm', endTime: '05:00 pm'},
],
},
{
id: 6,
day: 'Sat',
status: false,
shift: [],
},
{
id: 7,
day: 'Sun',
status: false,
shift: [],
},
]现在我的目标是向用户发送插槽,如果用户预订了任何插槽,那么如何标记预订的插槽,而不是在其他人要求插槽时发送预订的插槽。我在这个项目中使用express.js MongoDB,谢谢。
Q1)如何将班次转换为用户的槽位?
Q2)如果用户预订了任何空位,如何标记已预订?
Q3)如果用户要求只发送可用时隙,如何不发送已预订的时隙?
发布于 2021-10-11 09:28:51
数据
db={
"employees": [
{
"_id": 1,
shift: [
{
id: 1,
day: "Mon",
status: true,
shift: [
{
startTime: "08:00 am",
endTime: "09:00 pm"
},
{
startTime: "9:00 am",
endTime: "10:00 pm"
},
{
startTime: "10:00 am",
endTime: "11:00 pm"
},
{
startTime: "11:00 am",
endTime: "12:00 pm"
},
{
startTime: "12:00 pm",
endTime: "01:00 pm"
},
{
startTime: "02:00 pm",
endTime: "03:00 pm"
},
{
startTime: "03:00 pm",
endTime: "04:00 pm"
},
{
startTime: "04:00 pm",
endTime: "05:00 pm"
}
]
},
{
id: 2,
day: "Tue",
status: true,
shift: [
{
startTime: "08:00 am",
endTime: "09:00 pm"
},
{
startTime: "9:00 am",
endTime: "10:00 pm"
},
{
startTime: "10:00 am",
endTime: "11:00 pm"
},
{
startTime: "11:00 am",
endTime: "12:00 pm"
},
{
startTime: "12:00 pm",
endTime: "01:00 pm"
},
{
startTime: "02:00 pm",
endTime: "03:00 pm"
},
{
startTime: "03:00 pm",
endTime: "04:00 pm"
},
{
startTime: "04:00 pm",
endTime: "05:00 pm"
}
]
},
{
id: 3,
day: "Wed",
status: true,
},
{
id: 4,
day: "Thu",
status: true,
shift: [
{
startTime: "08:00 am",
endTime: "09:00 pm"
},
{
startTime: "9:00 am",
endTime: "10:00 pm"
},
{
startTime: "10:00 am",
endTime: "11:00 pm"
},
{
startTime: "11:00 am",
endTime: "12:00 pm"
},
{
startTime: "12:00 pm",
endTime: "01:00 pm"
},
{
startTime: "02:00 pm",
endTime: "03:00 pm"
},
{
startTime: "03:00 pm",
endTime: "04:00 pm"
},
{
startTime: "04:00 pm",
endTime: "05:00 pm"
}
]
},
{
id: 5,
day: "Fri",
status: true,
shift: [
{
startTime: "08:00 am",
endTime: "09:00 pm"
},
{
startTime: "9:00 am",
endTime: "10:00 pm"
},
{
startTime: "10:00 am",
endTime: "11:00 pm"
},
{
startTime: "11:00 am",
endTime: "12:00 pm"
},
{
startTime: "12:00 pm",
endTime: "01:00 pm"
},
{
startTime: "02:00 pm",
endTime: "03:00 pm"
},
{
startTime: "03:00 pm",
endTime: "04:00 pm"
},
{
startTime: "04:00 pm",
endTime: "05:00 pm"
}
]
},
{
id: 6,
day: "Sat",
status: false,
shift: [],
},
{
id: 7,
day: "Sun",
status: false,
shift: [],
},
]
}
],
"bookings": [
{
"_id": 1,
"employee_id": 1,
"day_id": 2,
"slot": 3
},
{
"_id": 2,
"employee_id": 1,
"day_id": 5,
"slot": 4
}
]
}聚合
db.employees.aggregate([
{
"$unwind": {
path: "$shift"
}
},
{
"$unwind": {
path: "$shift.shift",
includeArrayIndex: "arrayIndex"
}
},
{
"$lookup": {
from: "bookings",
let: {
arrayIndex: "$arrayIndex",
shift_id: "$shift.id"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$$shift_id",
"$day_id"
]
},
{
$eq: [
"$$arrayIndex",
"$slot"
]
}
]
}
}
}
],
as: "bookings"
}
},
{
"$match": {
"bookings": {
"$size": 0
}
}
}
])结果
[
{
"_id": 1,
"arrayIndex": NumberLong(0),
"bookings": [],
"shift": {
"day": "Mon",
"id": 1,
"shift": {
"endTime": "01:00 pm",
"startTime": "08:00 am"
},
"status": true
}
},
{
"_id": 1,
"arrayIndex": NumberLong(1),
"bookings": [],
"shift": {
"day": "Mon",
"id": 1,
"shift": {
"endTime": "05:00 pm",
"startTime": "02:00 pm"
},
"status": true
}
},
{
"_id": 1,
"arrayIndex": NumberLong(1),
"bookings": [],
"shift": {
"day": "Tue",
"id": 2,
"shift": {
"endTime": "05:00 pm",
"startTime": "02:00 pm"
},
"status": true
}
},
{
"_id": 1,
"arrayIndex": NumberLong(0),
"bookings": [],
"shift": {
"day": "Thu",
"id": 4,
"shift": {
"endTime": "01:00 pm",
"startTime": "08:00 am"
},
"status": true
}
},
{
"_id": 1,
"arrayIndex": NumberLong(1),
"bookings": [],
"shift": {
"day": "Thu",
"id": 4,
"shift": {
"endTime": "05:00 pm",
"startTime": "02:00 pm"
},
"status": true
}
},
{
"_id": 1,
"arrayIndex": NumberLong(0),
"bookings": [],
"shift": {
"day": "Fri",
"id": 5,
"shift": {
"endTime": "01:00 pm",
"startTime": "08:00 am"
},
"status": true
}
}
]如果你想问一下如何使用这个数据结构来查询具体的数据,请给出查询参数和期望的输出,我会添加查询功能。
https://stackoverflow.com/questions/69523132
复制相似问题