需要帮助才能在一个表

时间:2017-06-01 09:14:49

标签: javascript node.js

有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

如果你能事先帮助我,那么

1 个答案:

答案 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);
                            }
                        }
                    }
                }
            }