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