У меня есть база данных MongoDB с коллекцией, которая выглядит так:
+----------+-------------+
| Field | Type |
+----------+-------------+
| sha | varchar(40) |
| filename | text |
+----------+-------------+
И у меня также есть база данных MySQL с таблицей, которая выглядит так:
+----------+-------------+
| Field | Type |
+----------+-------------+
| sha | varchar(40) |
| filename | text |
+----------+-------------+
Столбец SHA в таблице MySQL содержит 50000 записей, а столбец имени файла пуст, который я хочу получить из приведенной выше коллекции MongoDB. Я хочу сравнить ключи SHA в этой таблице с ключами SHA в коллекции MongoDB. Правило должно быть следующим: если SHA существует в коллекции Mongo, затем извлеките имя файла, соответствующее этому ключу SHA, и вставьте его в поле имени файла, соответствующее ключу SHA в локальном MySQL.
Как я могу вернуть значения имени файла на основе значений sha, которые у меня есть в MySQL? Я просто не знаком с тем, как работают запросы MongoDB, правильные ли мои запросы MongoDB?
Текущий код, который я написал, выглядит так:
//Get sha values from mysql and compare with the sha values in mongo and return corresponding filenames
Statement sqlStmt = mysqlConn.createStatement();
HashMap < String, String > shaFileNameMap = new HashMap < String, String > ();
//get sha values from local mysql
String shaQuery = "select * from commit_files";
ResultSet results = sqlStmt.executeQuery(shaQuery);
String sha = null;
String filename = null;
//Store returned sha values in a hashmap
while (results.next()) {
sha = results.getString("sha");
filename = results.getString("filename");
//Store in a map
shaFileNameMap.put(sha, filename);
}
for (Map.Entry < String, String > entry: shaFileNameMap.entrySet()) {
String key = entry.getKey();
//get all filenames matching the list from mongo db and insert into mysql
DBCollection commits = db.getCollection("commits");
DBObject query = new BasicDBObject();
BasicDBObject fields = new BasicDBObject("sha", "" + key + "");
DBCursor curs = commits.find(query, fields);
while (curs.hasNext()) {
DBObject o = curs.next();
//The code to insert filenames into Mysql goes here
}
}