Karan
Karan

Reputation: 1151

Sequelize + sequelize cli seeding bulk amount of random data

What is the best way, or any way really to insert data for two separate tables and a join table in node/sequelize cli

i.e. i have a addresses table, I add in this

const faker = require('faker');
const models = require('./server/db/sequelize/models');
const States = models.States;
const Addresses = models.Addresses;

module.exports = {
  up: (queryInterface) => {

  return Promise.all([
    for (let i = 0; i < 1000; i++) {
      Addresses.create({
        streetName: faker.address.streetAddress(),
        streetNameAlt: faker.address.streetAddress(),
        zipCode: faker.address.zipCode(),
        town: faker.address.county(),
        city: faker.address.city(),
        stateId: id,
        addressTypeId: 1,
        createdAt: faker.date.recent(),
        updatedAt: faker.date.recent(),
      });
    }
  },

  down: (queryInterface) => {
      return queryInterface.bulkDelete('Addresses', null, {});
  }
};

However when i generate a user, i'd like to select a random address from my address table as addressId and create a joint record of that

i.e.

const faker = require('faker');

const usersList = [];

for (let i = 0; i < 1000; i++) {
  const userObj = {
    email: faker.internet.email(),
    password: faker.internet.password(),
    name: faker.name.findName(),
    gender: 'Male',
    description: '',
    location: faker.address.streetAddress(),
    website: faker.internet.url(),
  };
  usersList.push(userObj);
}

Seperate code

UserAddress.create({
userId: userId,
addressId: addressId
});

Upvotes: 3

Views: 3277

Answers (2)

Emeka
Emeka

Reputation: 79

//Another way to do this, easy and fast with random data

'use strict';

var faker = require("faker");

module.exports = {

    up: (queryInterface, Sequelize) => {

        var newData = [];

        for (let i = 0; i < 10; i++) {
            const seedData = {
                country_name: faker.address.country(),
                country_code: faker.address.countryCode(),
                createdAt: new Date(),
                updatedAt: new Date()
            };
            newData.push(seedData);
        }

        return queryInterface.bulkInsert('Countries', newData);
    },

    down: (queryInterface, Sequelize) => {
        return queryInterface.bulkDelete('Countries', null, {});
    }
};

Upvotes: 6

Michael McCabe
Michael McCabe

Reputation: 1152

You could simply query the list of address', put all the IDs in an array and pick one at random

const allAddress = models.Addresses.findAll();
const allIds = allAddress.map(x => x.id);
const rand = allIds[Math.floor(Math.random() * allIds.length)];

UserAddress.create({
  userId: userId,
  addressId: rand
});

Upvotes: 0

Related Questions