【问题标题】:Node.js | get unique result from multiple querysNode.js |从多个查询中获得唯一的结果
【发布时间】:2014-06-10 18:22:08
【问题描述】:

我编写了以下模块,它根据 Type var 值连接到 postgresql 或 SQLServer:

exports.GetQueryResult = function (type, Name,con,callback) {
            var sql='';
            if (Type ='PG') {

                        sql=sql + ' SELECT …………..';
                        pg.connect(con, function(err, client, done) {
                                if(err) {
                                        console.log("Error :" + err);
                                        return callback(err);
                                        }

                                client.query(sql,[Name], function(err, Result) {
                                        if(err) {
                                                    console.log("Error: " +err);
                                                    return callback(err);
                                                }
                                        return callback(null,Result); 
                                        done();
                                });     
                        });
            }
            else
            {    
                        sql=sql + ' SELECT …..';
                        sql.open(con, function (err, conn,done) {
                               if (err) {
                                          console.log("Error :" + err);
                                          return callback(err);
                               }

                               conn.queryRaw(sql,Name, function (err, Result) {
                                          if (err) {
                                                      console.log("Error ejecutando la consulta. Error: " +err);
                                                      return callback(err);
                                          }
                                          callback(null,Result);
                                          done;
                               });

                        });
            }
}; 

我从以下位置调用此函数:

var MultiBD = require('./MultiBD.js');
var LayerType=['PG','SQL','PG'];
var con=’’;

for (var i=1;  i<=Layers.length; i++) {    
                        if (Layers[i-1]!=undefined){
                                   con=MultiBD.conexion(LayerType [i-1],server,BD);
MultiBD.GetQueryResult(LayerType[i-1], Name[i-1],con, 
function (err,Result){      
                                                    console.log('Result : ' + Result.rows.length);
                                                    }           
                                    );
                        }        
}

结果是:

Result : 111

Result : 2888

Result : 5

我得到三个查询结果。第一个返回 111 行,第二个返回 2888 行,第三个返回 5 行。

我需要的是只获得一个包含所有 3004 行 (111+2888+5) 的唯一结果。

问候,

【问题讨论】:

  • 如果你的意思是联合,查询在不同的数据库服务器中..我不知道该怎么做你所说的......
  • 是什么阻止您合并结果?
  • 我不知道如何合并所有结果

标签: node.js sql-server-2008 postgresql


【解决方案1】:

在打印结果之前,您需要进行一些流程控制以等到所有 3 个方法都完成了它们的 DB 调用。有这方面的包,无论是回调品种还是 Promises。

这里是一个使用async 包的例子(它是流控制的回调变种):

var async = require('async');
var totalResults = 0;
async.each( Layers, function eachMethod( layer, eachCb ){
  var con = MultiBD.conexion(layer,server,BD);
  MultiBD.GetQueryResult(LayerType[i-1], Name[i-1],con, function (err,Result) {      
    if( err ) return eachCb( err );
    totalResults += Result.rows.length;
    eachCb( null );
  } );
}, function finalEach( eachErr ){
  if( eachErr ) console.log( "There was an error. " + eachErr );
  else console.log( "Result: " + totalResults );

});

在此调用中,对数组中的每个项目调用一个方法(eachMethod)。结果存储在共享变量中。当所有项目都完成后,将调用finalEach 方法。这里已经出现错误(您可以选择检查或不检查)并且所有调用都已完成,因此我们可以简单地打印共享变量的值。

【讨论】:

  • 感谢克莱的回答。问题是我需要的是合并查询的结果,而不是行数!
  • 代码只是一个例子。使totalResults 成为一个对象并用您需要的数据填充它。如果结果格式不同,您可能需要三个不同的函数来调用 DB。我提供的代码用于流量控制,因此您可以在正确的时间“完成”(例如,一旦合并所有数据)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-11
  • 2016-11-14
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多