Anexo A. Scripts creados para el caso práctico
PostgreSQL
Creación de tablas
actor
CREATE TABLE actor
(
actor_id integer NOT NULL DEFAULT nextval('actor_actor_id_seq'::regclass),
first_name character varying(45) NOT NULL,
last_name character varying(45) NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT actor_pkey PRIMARY KEY (actor_id)
)
address
CREATE TABLE address
(
address_id integer NOT NULL DEFAULT nextval('address_address_id_seq'::regclass),
address character varying(50) NOT NULL,
address2 character varying(50),
district character varying(20) NOT NULL,
city_id smallint NOT NULL,
postal_code character varying(10),
phone character varying(20) NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT address_pkey PRIMARY KEY (address_id),
CONSTRAINT fk_address_city FOREIGN KEY (city_id)
REFERENCES city (city_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
category
CREATE TABLE category
(
category_id integer NOT NULL DEFAULT nextval('category_category_id_seq'::regclass),
name character varying(25) NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT category_pkey PRIMARY KEY (category_id)
)
city
CREATE TABLE city
(
city_id integer NOT NULL DEFAULT nextval('city_city_id_seq'::regclass),
city character varying(50) NOT NULL,
country_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT city_pkey PRIMARY KEY (city_id),
CONSTRAINT fk_city FOREIGN KEY (country_id)
REFERENCES country (country_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
country
CREATE TABLE country
(
country_id integer NOT NULL DEFAULT nextval('country_country_id_seq'::regclass),
country character varying(50) NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT country_pkey PRIMARY KEY (country_id)
)
customer
CREATE TABLE customer
(
customer_id integer NOT NULL DEFAULT nextval('customer_customer_id_seq'::regclass),
store_id smallint NOT NULL,
first_name character varying(45) NOT NULL,
last_name character varying(45) NOT NULL,
email character varying(50),
address_id smallint NOT NULL,
activebool boolean NOT NULL DEFAULT true,
create_date date NOT NULL DEFAULT ('now'::text)::date,
last_update timestamp without time zone DEFAULT now(),
active integer,
CONSTRAINT customer_pkey PRIMARY KEY (customer_id),
CONSTRAINT customer_address_id_fkey FOREIGN KEY (address_id)
REFERENCES address (address_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
film
CREATE TABLE film
(
film_id integer NOT NULL DEFAULT nextval('film_film_id_seq'::regclass),
title character varying(255) NOT NULL,
description text,
release_year year,
language_id smallint NOT NULL,
rental_duration smallint NOT NULL DEFAULT 3,
rental_rate numeric(4,2) NOT NULL DEFAULT 4.99,
length smallint,
replacement_cost numeric(5,2) NOT NULL DEFAULT 19.99,
rating mpaa_rating DEFAULT 'G'::mpaa_rating,
last_update timestamp without time zone NOT NULL DEFAULT now(),
special_features text[],
fulltext tsvector NOT NULL,
CONSTRAINT film_pkey PRIMARY KEY (film_id),
CONSTRAINT film_language_id_fkey FOREIGN KEY (language_id)
REFERENCES language (language_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
film_actor
CREATE TABLE film_actor
(
actor_id smallint NOT NULL,
film_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT film_actor_pkey PRIMARY KEY (actor_id, film_id),
CONSTRAINT film_actor_actor_id_fkey FOREIGN KEY (actor_id)
REFERENCES actor (actor_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT film_actor_film_id_fkey FOREIGN KEY (film_id)
REFERENCES film (film_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
film_category
CREATE TABLE film_category
(
film_id smallint NOT NULL,
category_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
category category_enum,
CONSTRAINT film_category_pkey PRIMARY KEY (film_id, category_id),
CONSTRAINT film_category_category_id_fkey FOREIGN KEY (category_id)
REFERENCES category (category_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT film_category_film_id_fkey FOREIGN KEY (film_id)
REFERENCES film (film_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
inventory
CREATE TABLE inventory
(
inventory_id integer NOT NULL DEFAULT nextval('inventory_inventory_id_seq'::regclass),
film_id smallint NOT NULL,
store_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT inventory_pkey PRIMARY KEY (inventory_id),
CONSTRAINT inventory_film_id_fkey FOREIGN KEY (film_id)
REFERENCES film (film_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
language
CREATE TABLE language
(
language_id integer NOT NULL DEFAULT nextval('language_language_id_seq'::regclass),
name character(20) NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT language_pkey PRIMARY KEY (language_id)
)
payment
CREATE TABLE payment
(
payment_id integer NOT NULL DEFAULT nextval('payment_payment_id_seq'::regclass),
customer_id smallint NOT NULL,
staff_id smallint NOT NULL,
rental_id integer NOT NULL,
amount numeric(5,2) NOT NULL,
payment_date timestamp without time zone NOT NULL,
CONSTRAINT payment_pkey PRIMARY KEY (payment_id),
CONSTRAINT payment_customer_id_fkey FOREIGN KEY (customer_id)
REFERENCES customer (customer_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT payment_rental_id_fkey FOREIGN KEY (rental_id)
REFERENCES rental (rental_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET NULL,
CONSTRAINT payment_staff_id_fkey FOREIGN KEY (staff_id)
REFERENCES staff (staff_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
rental
CREATE TABLE rental
(
rental_id integer NOT NULL DEFAULT nextval('rental_rental_id_seq'::regclass),
rental_date timestamp without time zone NOT NULL,
inventory_id integer NOT NULL,
customer_id smallint NOT NULL,
return_date timestamp without time zone,
staff_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT rental_pkey PRIMARY KEY (rental_id),
CONSTRAINT rental_customer_id_fkey FOREIGN KEY (customer_id)
REFERENCES customer (customer_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT rental_inventory_id_fkey FOREIGN KEY (inventory_id)
REFERENCES inventory (inventory_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT rental_staff_id_key FOREIGN KEY (staff_id)
REFERENCES staff (staff_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
staff
CREATE TABLE staff
(
staff_id integer NOT NULL DEFAULT nextval('staff_staff_id_seq'::regclass),
first_name character varying(45) NOT NULL,
last_name character varying(45) NOT NULL,
address_id smallint NOT NULL,
email character varying(50),
store_id smallint NOT NULL,
active boolean NOT NULL DEFAULT true,
username character varying(16) NOT NULL,
password character varying(40),
last_update timestamp without time zone NOT NULL DEFAULT now(),
picture bytea,
CONSTRAINT staff_pkey PRIMARY KEY (staff_id),
CONSTRAINT staff_address_id_fkey FOREIGN KEY (address_id)
REFERENCES address (address_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
store
CREATE TABLE store
(
store_id integer NOT NULL DEFAULT nextval('store_store_id_seq'::regclass),
manager_staff_id smallint NOT NULL,
address_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT store_pkey PRIMARY KEY (store_id),
CONSTRAINT store_address_id_fkey FOREIGN KEY (address_id)
REFERENCES address (address_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT store_manager_staff_id_fkey FOREIGN KEY (manager_staff_id)
REFERENCES staff (staff_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
Consultas
SELECT * from film
SELECT * from rental
Listado de películas con su categoría y su lenguaje
Select f.film_id, f.title as titulo, f.description as descripcion,
f.release_year as anioPublicacion,
f.rental_duration as duración,
c.name as categoria, l.name as idioma
from film f
join film_category fc on fc.film_id = f.film_id
join category c on c.category_id = fc.category_id
join language l on l.language_id = f.language_id
order by f.film_id
Listado de actores con el número de películas
select COALESCE(a.first_name, ' '), COALESCE(a.last_name, ' '), count(f.film_id) as numeroPeliculas
from actor a
join film_actor fa on fa.actor_id = a.actor_id
join film f on f.film_id = fa.film_id
group by a.first_name, a.last_name
order by numeroPeliculas desc
MongoDB
Creación de colecciones
Actor
var actorSchema = new Schema({
actor_id: Number,
first_name: String,
last_name: String
});
Address
var addressSchema = new Schema({
address_id: Number,
address: String,
address2: String,
district: String,
phone: String,
postal_code: String,
city: String,
country: String,
customers: Array,
staffs: Array,
stores: Array
});
Customer
var customerSchema = new Schema({
customer_id: Number,
first_name: String,
last_name: String,
email: String,
active: Number,
activebool: Boolean,
create_date: Date,
rentals: Array,
payments: Array
});
Film
var filmSchema = new Schema({
film_id: Number,
title: String,
description: String,
release_year: Date,
rental_duration: Number,
rental_rate: Number,
length: Number,
replacement_cost: Number,
rating: String,
special_features: String,
fulltext: String,
languages: Array,
categories: Array,
actors: Array,
stores: Array
});
Payment
var paymentSchema = new Schema({
payment_id: Number,
amount: Number,
payment_date: Date
});
Rental
var rentalSchema = new Schema({
rental_id: Number,
rental_date: Date,
return_date: Date,
films: Array,
stores: Array,
payment: Array
});
Staff
var staffSchema = new Schema({
staff_id: Number,
first_name: String,
last_name: String,
email: String,
active: Boolean,
username: String,
password: String,
picture: String,
rentals: Array,
payments: Array,
store: Array
});
Store
var storeSchema = new Schema({
store_id: Number,
manager_staff_id: Number,
staffs: Array,
customers: Array
});
Consultas
Films.find()
Rentals.find()
Listado de películas con su categoría y su lenguaje
Films.find()
Listado de actores con el número de películas
var resultado = Actor.find();
var peliculas = Film.find({'actors':resultado.actor.id});
Actor.find({}, function(err, docs){
var i = -1;
var actors = docs;
for ( var i = 0; i < actors.length; i++ ){
Film.find({ actors: { "$in" : [actors[i].actor_id]} } , function(error, docs){
console.log(actors[i], "peliculas", docs.length)
});
}
});
Script de JavaScript para la migración
'use strict'
const pg = require('pg');
const mongoose = require('mongoose');
const async = require('async');
const Schema = mongoose.Schema;
var mongoCon;
var Store;
var Staff;
var Customer;
var Address;
var Rental;
var Actor;
var Film;
var Payment;
const config = {
user: 'postgres',
database: 'dvdrental',
password: 'Cuatro1991',
host: 'localhost',
port: 5432,
max: 10,
idleTimeoutMillis: 30000,
};
const pool = new pg.Pool(config);
pool.connect(function(err, client, done) {
if ( err ){
console.log("error al conectar con postgre", err)
}
else{
mongoCon = mongoose.createConnection('mongodb://172.17.0.2:27017/dvdrental', function(error) {
if ( error ){
console.log("error al conectar con mongo", error)
}
else{
esquemas();
migraciones();
consultasSimple();
consultasComplejas();
return "ok";
}
})
}
})
function consultasSimple(){
var query = ' SELECT * from film ';
pool.query(query, function(err, res) {
console.log(res)
});
Film.find({}, function(err, docs){
console.log(docs)
});
query = ' SELECT * from rental ';
pool.query(query, function(err, res) {
console.log(res)
});
Rental.find({}, function(err, docs){
console.log(docs)
});
}
function consultasComplejas(){
var query = "Select f.film_id, f.title as titulo,f.description as descripcion," +
"f.release_year as anioPublicacion,f.rental_duration as duración,c.name as categoria, " +
"l.name as idioma from film f " +
"join film_category fc on fc.film_id = f.film_id " +
"join category c on c.category_id = fc.category_id " +
"join language l on l.language_id = f.language_id order by f.film_id";
pool.query(query, function(err, res) {
console.log(res)
});
Film.find({}, function(err, docs){
console.log(docs)
});
query = "select COALESCE(a.first_name, ' '), COALESCE(a.last_name, ' '), " +
"count(f.film_id) as numeroPeliculas from actor a " +
"join film_actor fa on fa.actor_id = a actor_id " +
"join film f on f.film_id = fa.film id " +
"group by a.first_name, a.last_name " +
"order by numeroPeliculas desc";
pool.query(query, function(err, res) {
console.log(res)
});
Actor.find({}, function(err, docs){
var i = -1;
var actors = docs;
for ( var i = 0; i < actors.length; i++ ){
Film.find({ actors: { "$in" : [actors[i].actor_id]} } , function(error, docs){
console.log(actors[i], "peliculas", docs.length)
});
}
});
}
function migraciones(){
migrateActor();
migrateStore();
migrateStaff();
migrateCustomer();
migrateAddress();
migrateRental();
migrateFilm();
migratePayment();
}
function migrateFilm(){
var queryFilm = 'SELECT f.film_id, title, description, release_year, f.language_id, rental_duration, rental_rate,'+
' length, replacement_cost, rating, special_features, fulltext '+
'from film f join inventory i on i.film_id = f.film_id ';
pool.query(queryFilm, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var queryLanguage = 'SELECT l.name from language l where language_id = $1::int ';
var queryCategories = 'SELECT c.name from category c join film_category fc on fc.category_id = c.category_id '+
' where fc.film_id = $1::int ';
var queryActors = 'SELECT a.actor_id from actor a join film_actor fa on fa.actor_id = a.actor_id '+
' where fa.film_id = $1::int ';
var queryStores = 'SELECT distinct s.store_id from store s join inventory i on i.store_id = s.store_id '+
' where i.film_id = $1::int ';
var films = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < films.length },
function(callback){
var languages = [];
var categories = [];
var actors = [];
var stores = [];
pool.query(queryLanguage, [films[i].film_id], function(errorL, responseL) {
if(errorL) {
console.log('error running query', errorL);
}
else{
for ( var j = 0; j<responseL.rows.length; j++ ){
languages.push(responseL.rows[j].name)
}
}
pool.query(queryCategories, [films[i].film_id], function(errorC, responseC) {
if(errorC) {
console.log('error running query', errorC);
}
else{
for ( var j = 0; j<responseC.rows.length; j++ ){
categories.push(responseC.rows[j].name)
}
}
pool.query(queryActors, [films[i].film_id], function(errorA, responseA) {
if(errorA) {
console.log('error running query', errorA);
}
else{
for ( var j = 0; j<responseA.rows.length; j++ ){
actors.push(responseA.rows[j].actor_id)
}
}
pool.query(queryStores, [films[i].film_id], function(errorS, responseS) {
if(errorS) {
console.log('error running query', errorS);
}
else{
for ( var j = 0; j<responseS.rows.length; j++ ){
stores.push(responseS.rows[j].store_id)
}
}
var film = new Film ({
film_id: films[i].film_id,
title: films[i].title,
description: films[i].description,
release_year: films[i].release_year,
rental_duration: films[i].rental_duration,
rental_rate: films[i].rental_rate,
length: films[i].length,
replacement_cost: films[i].replacement_cost,
rating: films[i].rating,
special_features: films[i].special_features,
fulltext: films[i].fulltext,
languages: languages,
categories: categories,
actors: actors,
stores: stores
})
film.save(callback);
console.log("film saved")
});
});
});
});
}, function(err) {
console.log(err)
});
}
});
}
function migrateRental(){
var queryRental = 'SELECT rental_id, rental_date, return_date, film_id, store_id from rental r join inventory i on i.inventory_id = r.inventory_id ';
pool.query(queryRental, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var queryPayment = 'SELECT payment_id from payment where rental_id = $1::int ';
var rentals = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < rentals.length },
function(callback){
var payments = [];
pool.query(queryPayment, [rentals[i].rental_id], function(error, response) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<response.rows.length; j++ ){
payments.push(response.rows[j].payment_id)
}
}
var rental = new Rental ({
rental_id: rentals[i].rental_id,
rental_date: rentals[i].rental_date,
return_date: rentals[i].return_date,
film_id: rentals[i].film_id,
store_id: rentals[i].store_id,
payment: payments
})
rental.save(callback);
console.log("rental saved")
});
}, function(err) {
console.log(err)
});
}
});
}
function migrateAddress(){
var queryAddress = "SELECT address_id, address, address2, district, phone, postal_code, ci.city, c.country from address a " +
"join city ci on ci.city_id = a.city_id " +
"join country c on c.country_id = ci.country_id ";
pool.query(queryAddress, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var queryCustomers = 'SELECT customer_id from customer where address_id = $1::int ';
var queryStaffs = 'SELECT staff_id from staff where address_id = $1::int';
var queryStores = 'SELECT store_id from store where address_id = $1::int';
var addresses = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < addresses.length },
function(callback){
var customers = [];
var staffs = [];
var stores = [];
pool.query(queryCustomers, [addresses[i].address_id], function(error, responseC) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<responseC.rows.length; j++ ){
customers.push(responseC.rows[j].customer_id)
}
}
pool.query(queryStaffs, [addresses[i].address_id], function(error, responseSt) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<responseSt.rows.length; j++ ){
staffs.push(responseSt.rows[j].staff_id)
}
}
pool.query(queryStores, [addresses[i].address_id], function(error, responseStore) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<responseStore.rows.length; j++ ){
stores.push(responseStore.rows[j].store_id)
}
}
var address = new Address ({
address_id: addresses[i].address_id,
address: addresses[i].address,
address2: addresses[i].address2,
district: addresses[i].address2,
phone: addresses[i].phone,
postal_code: addresses[i].postal_code,
city: addresses[i].city,
country: addresses[i].country,
customers: customers,
Staffs: staffs,
Stores: stores
})
address.save(callback);
console.log("address saved")
});
});
});
}, function(err) {
console.log(err)
});
}
});
}
function migrateCustomer(){
var queryCustomer = 'SELECT customer_id, first_name, last_name, email, active, activebool, create_date from customer ';
pool.query(queryCustomer, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var queryRental = 'SELECT rental_id from rental where customer_id = $1::int ';
var queryPayment = 'SELECT payment_id from payment where customer_id = $1::int ';
var customers = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < customers.length },
function(callback){
var rentals = [];
var payments = [];
pool.query(queryRental, [customers[i].customer_id], function(error, response) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<response.rows.length; j++ ){
rentals.push(response.rows[j].rental_id)
}
}
pool.query(queryPayment, [customers[i].customer_id], function(error, responseP) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<responseP.rows.length; j++ ){
payments.push(responseP.rows[j].payment_id)
}
}
var customer = new Customer ({
customer_id: customers[i].customer_id,
first_name: customers[i].first_name,
last_name: customers[i].last_name,
email: customers[i].email,
active: customers[i].active,
activebool: customers[i].activebool,
create_date: customers[i].create_date,
rentals: rentals,
payments: payments
})
customer.save(callback);
console.log("customer saved")
});
});
}, function(err) {
console.log(err)
});
}
});
}
function migrateStaff(){
var queryStaff = 'SELECT staff_id, first_name, last_name, email, active, username, password, picture from staff ';
pool.query(queryStaff, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var queryRental = 'SELECT rental_id from rental where staff_id = $1::int ';
var queryPayment = 'SELECT payment_id from payment where staff_id = $1::int ';
var staffs = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < staffs.length },
function(callback){
var rentals = [];
var payments = [];
pool.query(queryRental, [staffs[i].staff_id], function(error, response) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<response.rows.length; j++ ){
rentals.push(response.rows[j].rental_id)
}
}
pool.query(queryPayment, [staffs[i].staff_id], function(error, responseP) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<responseP.rows.length; j++ ){
payments.push(responseP.rows[j].payment_id)
}
}
var staff = new Staff ({
staff_id: staffs[i].staff_id,
first_name: staffs[i].first_name,
last_name: staffs[i].last_name,
email: staffs[i].email,
active: staffs[i].active,
username: staffs[i].username,
password: staffs[i].password,
picture: staffs[i].picture,
rentals: rentals,
payments: payments
})
staff.save();
console.log("staff saved")
callback ( null, "saved" );
});
});
}, function(err) {
console.log(err)
});
}
});
}
function migrateStore(){
var queryStore = 'SELECT store_id, manager_staff_id from store s ';
pool.query(queryStore, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var queryStaff = 'SELECT staff_id from staff where store_id = $1::int ';
var queryCustomer = 'SELECT customer_id from customer where store_id = $1::int ';
var stores = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < stores.length },
function(callback){
var staffs = [];
var customers = [];
pool.query(queryStaff, [stores[i].store_id], function(error, response) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<response.rows.length; j++ ){
staffs.push(response.rows[j].staff_id)
}
}
pool.query(queryCustomer, [stores[i].store_id], function(error, responseC) {
if(error) {
console.log('error running query', error);
}
else{
for ( var j = 0; j<responseC.rows.length; j++ ){
customers.push(responseC.rows[j].customer_id)
}
}
var store = new Store ({
store_id: stores[i].store_id,
manager_staff_id: stores[i].manager_staff_id,
staffs: staffs,
customers: customers
})
store.save(callback);
console.log("store saved")
});
});
}, function(err) {
console.log(err)
});
}
});
}
function migrateActor(){
var queryActor = 'SELECT actor_id, first_name, last_name from actor ';
pool.query(queryActor, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var actors = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < actors.length },
function(callback){
var actor = new Actor ({
actor_id: actors[i].actor_id,
first_name: actors[i].first_name,
last_name: actors[i].last_name
})
actor.save(callback);
console.log("actor saved")
}, function(err) {
console.log(err)
});
}
});
}
function migratePayment(){
var queryPayment = 'SELECT payment_id, amount, payment_date from payment ';
pool.query(queryPayment, function(err, res) {
if(err) {
console.log('error running query', err);
}
else{
var payments = res.rows;
var i = -1;
async.whilst(
function(){ i++; return i < payments.length },
function(callback){
var payment = new Payment ({
payment_id: payments[i].payment_id,
amount: payments[i].amount,
payment_date: payments[i].payment_date
})
payment.save(callback);
console.log("payment saved")
}, function(err) {
console.log(err)
});
}
});
}
function esquemas(){
var filmSchema = new Schema({
film_id: Number,
title: String,
description: String,
release_year: Date,
rental_duration: Number,
rental_rate: Number,
length: Number,
replacement_cost: Number,
rating: String,
special_features: String,
fulltext: String,
languages: Array,
categories: Array,
actors: Array,
stores: Array
});
Film = mongoCon.model('film', filmSchema);
var rentalSchema = new Schema({
rental_id: Number,
rental_date: Date,
return_date: Date,
films: Array,
stores: Array,
payment: Array
});
Rental = mongoCon.model('rental', rentalSchema);
var addressSchema = new Schema({
address_id: Number,
address: String,
address2: String,
district: String,
phone: String,
postal_code: String,
city: String,
country: String,
customers: Array,
staffs: Array,
stores: Array
});
Address = mongoCon.model('address', addressSchema);
var customerSchema = new Schema({
customer_id: Number,
first_name: String,
last_name: String,
email: String,
active: Number,
activebool: Boolean,
create_date: Date,
rentals: Array,
payments: Array
});
Customer = mongoCon.model('customer', customerSchema);
var staffSchema = new Schema({
staff_id: Number,
first_name: String,
last_name: String,
email: String,
active: Boolean,
username: String,
password: String,
picture: String,
rentals: Array,
payments: Array,
store: Array
});
Staff = mongoCon.model('staff', staffSchema);
var storeSchema = new Schema({
store_id: Number,
staffs: Array,
customers: Array
});
Store = mongoCon.model('store', storeSchema);
var actorSchema = new Schema({
actor_id: Number,
first_name: String,
last_name: String
});
Actor = mongoCon.model('actor', actorSchema);
var paymentSchema = new Schema({
payment_id: Number,
amount: Number,
payment_date: Date
});
Payment = mongoCon.model('payment', paymentSchema);
}