简体   繁体   中英

Conversion of Array and objects to bulk insert in mysql Sequelize + Nodejs

This is my json object:

    {
    "groups":

 [
        {
            "id": 1,
            "groupname": "Angular",
            "createdAt": "2017-12-05T09:36:05.000Z",
            "updatedAt": "2017-12-05T09:36:05.000Z",
            "contactgroups": [
            {
                "id": 1,
                "contact":
                {
                    "gsm": "12345"
                }
            },
            {
                "id": 3,
                "contact":
                {
                    "gsm": "54321"
                }
            },
            {
                "id": 4,
                "contact":
                {
                    "gsm": "99999"
                }
            }],
            "select": true
        },
        {
            "id": 2,
            "groupname": "React",
            "createdAt": "2017-12-05T09:36:10.000Z",
            "updatedAt": "2017-12-05T09:36:10.000Z",
            "contactgroups": [
            {
                "id": 2,
                "contact":
                {
                    "gsm": "66666"
                }
            },
            {
                "id": 5,
                "contact":
                {
                    "gsm": "54321"
                }
            }],
            "select": true
        },
        {
            "id": 3,
            "groupname": "Vue",
            "createdAt": "2017-12-05T09:36:15.000Z",
            "updatedAt": "2017-12-05T09:36:15.000Z",
            "contactgroups": [
            {
                "id": 6,
                "contact":
                {
                    "gsm": "12345"
                }
            }]
        },
     ],
    "sender": "ifelse",
    "message": "test"
}

I want to convert above object like this:

[
    {"gsm": 12345, "sender": "ifelse", "message": "test"},
    {"gsm": 54321, "sender": "ifelse", "message": "test"},
    {"gsm": 99999, "sender": "ifelse", "message": "test"},
    {"gsm": 66666, "sender": "ifelse", "message": "test"},
    {"gsm": 54321, "sender": "ifelse", "message": "test"},
    {"gsm": 12345, "sender": "ifelse", "message": "test"},

]

Then only i am able to bulk insert in sequelize.

How to do this using for or foreach or any other functions? to done this stuff?

is foreach better? is it possible to do with map?

I want my final json object, then only sequelize allowed to bulk create.

Ps: I want "select": true json gsm numbers only

In your case, I am using for loop to make JSON object

  var data={ "groups": [ { "id": 1, "groupname": "Angular", "createdAt": "2017-12-05T09:36:05.000Z", "updatedAt": "2017-12-05T09:36:05.000Z", "contactgroups": [ { "id": 1, "contact": { "gsm": "12345" } }, { "id": 3, "contact": { "gsm": "54321" } }, { "id": 4, "contact": { "gsm": "99999" } }], "select": true }, { "id": 2, "groupname": "React", "createdAt": "2017-12-05T09:36:10.000Z", "updatedAt": "2017-12-05T09:36:10.000Z", "contactgroups": [ { "id": 2, "contact": { "gsm": "66666" } }, { "id": 5, "contact": { "gsm": "54321" } }], "select": true }, { "id": 3, "groupname": "Vue", "createdAt": "2017-12-05T09:36:15.000Z", "updatedAt": "2017-12-05T09:36:15.000Z", "contactgroups": [ { "id": 6, "contact": { "gsm": "12345" } }] }, ], "sender": "ifelse", "message": "test" } var result=[ {"gsm": 12345, "sender": "ifelse", "message": "test"}, {"gsm": 54321, "sender": "ifelse", "message": "test"}, {"gsm": 99999, "sender": "ifelse", "message": "test"}, {"gsm": 66666, "sender": "ifelse", "message": "test"}, {"gsm": 54321, "sender": "ifelse", "message": "test"}, {"gsm": 12345, "sender": "ifelse", "message": "test"}, ] var arr=[]; for(var i=0;i<data.groups.length;i++){ if(data.groups[i].select){ for(var j=0;j<data.groups[i].contactgroups.length;j++){ arr.push({gsm:data.groups[i].contactgroups[j].contact.gsm,sender:data.sender,message:data.message}); } } } console.log(arr); 
   

Try with lodash

var result = _.flatten(data.groups.map( r => r.contactgroups))
              .map(r => ({ gsm: r.contact.gsm, sender: "ifelse", message: "test" })
);

console.log(result);

Update #2 - With filter

var result = _.flatten(_.filter(data.groups,{'select': true }).map( r => r.contactgroups))
              .map(r => ({ gsm: r.contact.gsm, sender: "ifelse", message: "test" })
);

console.log(result);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM