简体   繁体   English

在mysql Sequelize + Nodejs中将数组和对象转换为大容量插入

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

This is my json object: 这是我的json对象:

    {
    "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? 如何使用for或foreach或任何其他函数执行此操作? to done this stuff? 做这个东西?

is foreach better? foreach更好吗? is it possible to do with map? 地图有可能吗?

I want my final json object, then only sequelize allowed to bulk create. 我想要我的最终json对象,然后仅允许序列化来批量创建。

Ps: I want "select": true json gsm numbers only 附:我要“选择”:仅true json gsm数字

In your case, I am using for loop to make JSON object 就您而言,我正在使用for循环制作JSON对象

  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 尝试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 更新#2-带过滤器

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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