循环遍历对象并将它们添加到Sequelize db

时间:2016-09-19 04:28:33

标签: node.js promise sequelize.js

我有一个对象数组,我希望通过Sequelize将其放入SQL中,并且我遇到了问题。

version: '2'

volumes:
  jenkins_home:
    external: true

services:
  jenkins:
    build:
      context: .
      args:
        DOCKER_GID: ${DOCKER_GID}
        DOCKER_ENGINE: ${DOCKER_ENGINE}
        DOCKER_COMPOSE: ${DOCKER_COMPOSE}
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "8080:8080"

目前我设置它的方式是通过一个简单的for。

[ 
  { owner: false,
    id: '2342365',
    name: 'awrAPI' },
  { owner: false,
    id: '5675689699',
    name: 'TgatAPI' },
  { owner: true,
    id: '57456767',
    name: 'ytasyAPI' }
[

我认为这是错误的,并且想知道是否有更好的方法来循环我的对象并链接findorcreates。目前它通过第一个对象,但之后不再添加。我一直在研究使用Bluebird,但我对使用promises并不太熟悉。想法?

2 个答案:

答案 0 :(得分:1)

var myData = [ 
  { 
    owner: false,
    id: '2342365',
    name: 'awrAPI' 
  },
  { 
    owner: false,
    id: '5675689699',
    name: 'TgatAPI'
  },
  { 
    owner: true,
    id: '57456767',
    name: 'ytasyAPI'
  }
];

Promise.all(myData.map(function(value) {
  // Do your thing
  return Guild.findOrCreate...
})).then(function() {
  // All is resolved do your next thing
})

答案 1 :(得分:1)

一种替代方法是利用squelize的bulkCreate模型方法插入多个记录。 link to sequelize's bulkCreate docs

此处的简短代码段:

 const dataForInsertion = [ 
    {
      username:"daniel",
      currentORM:"Sequelize"
    },
    {
      username:"lekan",
      currentORM:"Mongoose"
    },
 ]

 Guild.bulkCreate(dataForInsertion)
     .then(()=>{})
     .catch(()=>{})