在Firebase数据库中推送新值之前,如何检查是否存在相同的数据?

时间:2018-01-31 11:40:06

标签: javascript mysql node.js firebase firebase-realtime-database

我正在为我的大学论文项目开发一个后端,我正在为我的大学开发一个考勤系统。我的系统将处理由我的大学中已经使用的时间表Web应用程序生成的数据,我的系统将通过该时间表识别时间表中的讲座并参与其中。

时间表应用程序有一个mysql后端,但我的应用程序有一个firebase后端。 到目前为止,我能够从mysql表中获取数据并将它们推送到firebase数据库中。但问题是我每次都运行上面的代码,它再次推送已经存在的数据,这是有道理的。

但我想要实现的只是添加所有数据一次,然后只添加新值或任何更新的值。

我该如何解决这个问题?我知道,在推送数据之前我必须添加更多检查,但我真的很困惑应该如何解决这个问题。

// Connection to MySql sever.
mysql = require('mysql');
con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "root",
  database: "mrbs"
});

// Connection to Firebase.
firebase = require('firebase');
firebase.initializeApp({
  serviceAccount: "./SICSR-d924e501f52d.json",
  databaseURL: "https://sicsr-d4771.firebaseio.com"
});


let fetchRecords = function(sql) {
  return new Promise (function(resolve, reject) {
    con.query(sql, function (err ,  result){
      if(err) reject(err);
      resolve(result);
    });
  });
};

fetchRecords("SELECT start_time, end_time, room_id, timestamp, Program, Batch, Course, Semester, Faculty, Division FROM mrbs_entry").then(function(fromResolve){
  Resultset = fromResolve;
  setRoomName(Resultset);
  //console.log(global);
}).catch(function(fromReject){
  console.log(fromReject);
});

//set room_id to the room_name retrive and send it forward to firebase.
function setRoomName(value){
  let objValue = value;

  for(let i = 0; i<objValue.length; i++) {

    con.query("Select room_name , id from mrbs_room where id = '" + objValue[i].room_id + "'", function (err, result2){
      if (err) throw err;
      let j =0;
      while(j<result2.length){
         roomName = result2[j].room_name;
        if(roomName == null && objValue[i] == null){
          // TODO add some code here.
        } else {
            objValue[i].room_id = roomName;
            saveRecord(objValue[i]);
        }
        j++;
      }
    });
  }
}

function saveRecord(data){
  let Resultset = [];
  Resultset = data;
  feedDatainFirebase(Resultset);
}

function feedDatainFirebase(value){
  var Resultset = value;
   let ref = firebase.database().ref("Lecture");
       ref.push({
         course_name: Resultset.Course,
         program_name : Resultset.Program,
         room_number : Resultset.room_id,
         start_time : Resultset.start_time,
         end_time : Resultset.end_time,
         teacher_name : Resultset.Faculty,
         timestamp : Resultset.timestamp

       });
}

1 个答案:

答案 0 :(得分:1)

如果您想要从mysql数据库同步到firebase,您需要拥有某种类型的密钥,您可以在每种密钥中引用这些密钥以将记录绑定在一起。我首先只查询要在mysql中同步的记录。然后,循环遍历它们,对于每一个,您将需要根据您定义的键更新firebase中的引用。