有2种选择 我的数据库是这样构建的
{
"_id" : ObjectId("58ecbb3be949603f122dfcc4"),
"work_id" : 651853,
"date" : ISODate("2017-04-10T00:00:00.000Z"),
"updated_at" : ISODate("2017-04-11T11:17:42.067Z"),
"name" : "John Doe",
"wage_type" : [
{
"_id" : ObjectId("58ecbb567f7ed00c2ca041b6"),
"type_ident" : "157",
"start_string" : "020000",
"start_time" : "02:00:00",
"total" : "08:00:00",
"end_time" : "09:59:59",
"end_string" : "095959",
"group" : "Wage Type<br/>",
"end_date" : "2017-04-10",
"type" : "Morning Hours",
"start_date" : "2017-04-10",
"time_sheet_ident" : "248288"
}
],
"campaign" : [
{
"_id" : ObjectId("58ecbb567f7ed00c2ca041b5"),
"type_ident" : "165",
"start_string" : "020000",
"start_time" : "02:00:00",
"total" : "08:00:00",
"end_time" : "09:59:59",
"end_string" : "095959",
"group" : "Campaign<br/>",
"end_date" : "2017-04-10",
"type" : "Waitter",
"start_date" : "2017-04-10",
"time_sheet_ident" : "248288"
}
],
"__v" : 0,
"created_at" : ISODate("2017-04-11T11:17:13.182Z")
}
但我发现有两个困难 首先,当一个工人有这种结构
基于用户工资
John Doe | Morning Hours | 4.00-12.00
基于用户广告系列
John Doe | Waiter | 4.00-8.00
John Doe | Bartender | 8.00-12.00
这是另一个选择
Jim Dow | Morning Hours | 9.00-16.00
JIm Dow | Night Hours | 16-18
基于广告系列
Jim Dow | Waitter | 9.00-18.00
到目前为止我所能做的就是当时有相同的开始时间和结束时间,所以我通过他参与的活动
我不知道的困难部分是他们在不同广告系列的数据库中是2 john doe还是2个不同时间表上的2 jim dow
如果你能事先帮助我,那么
答案 0 :(得分:0)
解决了我的胜利 for(let i = 0; i&lt; timesheets.length; i ++){
if (timesheets[i].wage_type !== 'none' && timesheets[i].wage_type || timesheets[i].campaign !== 'none' && timesheets[i].campaign ) {
for (let j = 0; j < timesheets[i].wage_type.length; j++) {
for (let k = 0; k < timesheets[i].campaign.length; k++){
if(timesheets[i].wage_type[j].start_time == timesheets[i].campaign[k].start_time && timesheets[i].wage_type[j].end_time == timesheets[i].campaign[k].end_time && timesheets[i].wage_type[j].time_sheet_ident == timesheets[i].campaign[k].time_sheet_ident ) {
const temp = {};
temp.ccms_id = timesheets[i].ccms_id;
temp.date = timesheets[i].date;
temp.name = timesheets[i].name;
temp.campaign = timesheets[i].campaign[k].type;
temp.type = timesheets[i].wage_type[j].type;
temp.start_time = timesheets[i].wage_type[j].start_time;
temp.end_time = timesheets[i].wage_type[j].end_time;
temp.total = timesheets[i].wage_type[j].total;
wages.push(temp);
}
else if (timesheets[i].wage_type[j].start_time <= timesheets[i].campaign[k].start_time && timesheets[i].wage_type[j].end_time >= timesheets[i].campaign[k].end_time ){
const temp = {};
temp.ccms_id = timesheets[i].ccms_id;
temp.date = timesheets[i].date;
temp.name = timesheets[i].name;
temp.campaign = timesheets[i].campaign[k].type;
temp.type = timesheets[i].wage_type[j].type;
temp.start_time = timesheets[i].campaign[k].start_time;
temp.end_time = timesheets[i].campaign[k].end_time;
temp.total = timesheets[i].campaign[k].total;
wages.push(temp);
}
else if (timesheets[i].wage_type[j].start_time >= timesheets[i].campaign[k].start_time && timesheets[i].wage_type[j].end_time <= timesheets[i].campaign[k].end_time ){
const temp = {};
temp.ccms_id = timesheets[i].ccms_id;
temp.date = timesheets[i].date;
temp.name = timesheets[i].name;
temp.campaign = timesheets[i].campaign[k].type;
temp.type = timesheets[i].wage_type[j].type;
temp.start_time = timesheets[i].wage_type[j].start_time;
temp.end_time = timesheets[i].wage_type[j].end_time;
temp.total = timesheets[i].wage_type[j].total;
wages.push(temp);
}
}
}
}
}