如果节点js存在于mysql中,则忽略更新数据

时间:2017-10-08 07:37:49

标签: mysql node.js redis

我要检查我的数据的id如果存在于mysql更新它并且如果没有创建它,但是在select结果它不起作用并且去esle部分并且大多数时候创建动作并且得到Duplicate条目错误。最后我通过无限循环运行此文件。 我应该告诉我,当我在redis中有大量数据时会出现这个问题。

如果能帮助我,我会很高兴,谢谢你。)

这是我的代码:

var 
mysql = require('mysql'),
redis = require('redis'),
infiniteLoop = require('infinite-loop'),
client = redis.createClient(),
lop = new infiniteLoop,
config = require( __dirname + '/app/Config').config,

con = function() {

    return mysql.createConnection({
        host     : config.db_host,
        user     : config.db_user,
        password : config.db_pass,
        database : config.db_name
    });

},

insertDB = function( data ) {

    var connection = con();

    connection.connect( function( err ) {

        connection.query( 'SELECT * FROM real_user WHERE id =' + data.id, function( err, res ) {

            if ( err ) {

                data = JSON.stringify(data);

                client.lpush('aipi', data, function(err,reply) {
                    if ( err ) throw err;
                });

            }

            console.log( "out", data.id, res.length, res );

            if ( typeof res != 'undefined' && res.length > 0  ) {

                console.log( "update", data.id );

                connection.query( 'UPDATE real_user SET ? WHERE id =' + res[0].id, { request_count: data.request_count, updated_at: data.created_at }, 
                    function( err, res ) {
                    if ( err ) throw err;
                });

            } else {

                console.log( "create", data.id );

                connection.query( 'INSERT INTO real_user SET ?', data,  function( err, res ) {
                    if ( err ) throw err;
                });
            }
          connection.end();

        });

    });

},

run = function() {

    var data;

    client.brpop('aipi', 0, function(err, reply) {

        if ( reply[1] ) {

            data = JSON.parse(reply[1]);

            insertDB(data);
        }

    });

};

lop.add(run, []).run();

1 个答案:

答案 0 :(得分:0)

修正了:

ON DUPLICATE KEY UPDATE

connection.connect( function( err ) {

    connection.query( "INSERT INTO real_user SET ? ON DUPLICATE KEY UPDATE updated_at = '" + data.created_at
     + "', request_count = '" + data.request_count + "'", 
        data,  function( err, res ) {
            connection.end();
        });

    });