2015-01-03 18 views
5

Mam zamiar przenieść moją bazę danych aplikacji z Mysql do Mongo z niskimi zmianami w schemacie. W moim nowym schemacie scaliłem dwa tabele Mysql w jedną kolekcję Mongo. Chcę użyć mongify (https://github.com/anlek/mongify) gem, aby zapełnić moje istniejące dane Mysql w Mongo za pomocą nowszego schematu.Jak scalić dwie tabele w jedną za pomocą mongify

Jak to zrobić? Czy istnieje sposób w mongify do łączenia dwóch tabel Mysql w jeden?

tabel MySQL

user 
    id 
    name 
    nickname 
    type 

user_role 
    id 
    role 
    alias 
    user_id 

I połączyły powyższe dwie tabele na jednej kolekcji w Mongo

user 
    id 
    name 
    type 
    role 
    alias 

Odpowiedz

2

Spróbuj Lewy Zarejestrowany: (tabele zostaną połączone)

SELECT column_name(s) 
FROM table1 
LEFT JOIN table2 
ON table1.column_name=table2.column_name; 

Export że dane do formatu sql i przesłać je do mongodb

SELECT country INTO customerCountry 
FROM customers 
WHERE customerNumber = p_customerNumber; 

    CASE customerCountry -- Here you have to see if that alias data is set 
WHEN 'USA' THEN 
    SET p_shiping = '2-day Shipping'; -- here you have to write Update Query 
ELSE 
    SET p_shiping = '5-day Shipping'; 
END CASE; 

myślę, że może to pomóc

+0

Dzięki za cenne odpowiedzi !!! Tabela użytkownika ma "pseudonim", a druga tabela ma pola "alias". Jeśli potrzebuję zmienić nazwę pola "pseudonim" na "alias" i muszę umieścić wartości user_info.alias w tabeli użytkownika. Jak mam to zrobic? Prosimy podać swoje dane wejściowe ... – SST

+0

Czy chcesz zastąpić wszystkie dane z user.nickname z user_role.alias colums –

+0

Tak. Powinno być w porządku!!! – SST

2

pobrania danych za pomocą DOŁĄCZ z MySQL i załadować te dane do MongoDB:

Spróbuj:

SELECT U.id, U.name, U.type, UR.role 
FROM USER U 
INNER JOIN user_role UR ON U.id = UR.user_id; 
0

An alternatywnie, jeśli trudno jest połączyć dwie tabele ad-hoc, a następnie uruchomić mongo shell script pos t-hoc; są bardzo łatwe do zaprogramowania (kilka linii js) i łatwe do wykonania. plus można zastosować dowolną potrzebną konwersję, taką jak w tablicach json/bson dozwolonych w mongo, ale nie w mysql.

przy założeniu kolekcji user (user) i user_role (lub table) w mongo.

db.user_role.find({}).forEach(function(doc) { 
    var roles = doc.roles; 
    // convert mysql format here if needed. 
    //var roles_array = JSON.parse(roles) // or whatever? 

    //var alias = doc.alias; 
    // if alias is null empty or ?? 

    // dont upsert to avoid orphaned user_role records 
    db.user.update({"_id": doc.user_id}, {"roles": roles, "alias", doc.alias }, {upsert: false, multi: false}); 

} 

następnie wykonać za pomocą powłoki Mongo

Mongo localhost: 27017/test myjsfile.js