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

Posted

技术标签:

【中文标题】在mysql Sequelize + Nodejs中将数组和对象转换为批量插入【英文标题】:Conversion of Array and objects to bulk insert in mysql Sequelize + Nodejs 【发布时间】:2018-05-21 04:24:46 【问题描述】:

这是我的 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"

我想像这样转换上面的对象:

[
    "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",

]

然后只有我能够批量插入续集。

如何使用 for 或 foreach 或任何其他函数来做到这一点?做这些事情?

foreach 更好吗?可以用地图做吗?

我想要我的最终 json 对象,然后只允许批量创建 sequelize。

Ps:我想要“选择”:只有真正的 json gsm 数字

【问题讨论】:

【参考方案1】:

在你的情况下,我使用 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);
   

【讨论】:

兄弟,它有效,但问题略有改变,我现在应该编辑这个问题吗?或发布新问题并在此处发布该链接? 立即查看我的 json 对象 有选择:真,我只想从选择中获取 gsm 号码:真【参考方案2】:

试试lodash

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

console.log(result);

更新 #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);

【讨论】:

不错 :) 我想要“选择”:只有真正的 json gsm 号码

以上是关于在mysql Sequelize + Nodejs中将数组和对象转换为批量插入的主要内容,如果未能解决你的问题,请参考以下文章

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

Javascript(NodeJs) - 将数组和对象转换为 mysql 中的批量插入(Sequelize)

使用 NodeJS 将启动和停止时间发布到 mysql(sequelize)

nodejs使用sequelize操作mysql实例

全栈项目|小书架|服务器开发-NodeJS 中使用 Sequelize 操作 MySQL数据库

nodejs利用sequelize-auto 根据数据库的table 生成model