我打算使用低架构更改将我的应用程序数据库从Mysql迁移到Mongo。在我的新模式中,我将两个Mysql表合并为一个Mongo集合。我想使用mongify(https://github.com/anlek/mongify)gem将我现有的Mysql数据用更新的模式填充到Mongo中。
怎么做?有没有办法在mongify中将两个Mysql表合并为一个?
Mysql表
user
id
name
nickname
type
user_role
id
role
alias
user_id
我将以上两个表合并为Mongo中的单个集合
user
id
name
type
role
alias
答案 0 :(得分:2)
尝试左连接:(表将合并)
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
将该数据导出为sql格式并将其上传到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;
我认为它可能会对你有所帮助
答案 1 :(得分:2)
使用 MySQL 中的 JOIN 获取数据并将该数据加载到 MongoDB:
试试这个:
SELECT U.id, U.name, U.type, UR.role
FROM USER U
INNER JOIN user_role UR ON U.id = UR.user_id;
答案 2 :(得分:0)
另一种选择,如果难以合并两个表ad-hoc,则运行mongo shell script post-hoc;它们非常容易编程(偶尔使用js行)并且易于执行。加一个可以应用任何所需的转换,例如进入mongo允许的json / bson数组,但不能应用于mysql。
在mongo中假设用户和user_role集合(或表)。
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});
}
然后使用mongo shell执行
mongo localhost:27017 / test myjsfile.js