使用LoopBack返回总和

时间:2016-03-13 16:43:24

标签: loopbackjs strongloop

我无法通过LoopBack找到解决方法,虽然有人可以提供帮助,或者指出我可以采用替代/推荐的方法来做到这一点。

我有一个'交通'看起来像这样的模型:

{
  "fromTime": "string",
  "toTime": "string",
  "trafficTypeId": 0,
  "totalPackets": 0,
  "totalSize": "string",
  "id": 0
}

现在,每个模型都有一定的间隔,比如从16:00到16:05,它保留了此时处理的总数据包和大小。

我需要显示一个图表,从每小时/每天/每周等更改它的显示。

我如何做到这一点,以便总结在客户端不会发生,因为我担心可能会出现性能问题(当试图用5分钟间隔计算一个月时)?相反,我想创建一个带有2个参数的函数:startTimeendTime,并返回1个包含此时包和总大小的对象?

我看过remote methods,但它似乎并不适合我的需要。理解这个我错了吗?

还有其他推荐的尝试方法吗?

修改:是否可以调用以下内容:

traffic.find({'where': {`fromTime': {gt: SOME_TIME}, 'toTime': {lt: SOME_OTHER_TIME } }); // (using AngularJS)

并将返回的数据传递给我将编码的远程方法,以总结我想要的值?

1 个答案:

答案 0 :(得分:4)

远程方法可以用于此,为什么你认为它不会?而不是调用内置查询方法,只需使用Node语法查询数据库并在后端进行求和。您不需要先调用数据,然后将数据从客户端发送回远程方法,只需将其打包在一个远程方法中:

traffic.js中的内容:

module.exports = function(Traffic) {

  Traffic.getGraphData = function (fromTime, toTime, cb) {

    let filter = {
      where: {
        fromTime: {gt: fromTime},
        toTime: {lt: toTime}
      }
    };

    Traffic.find(filter, function(err, trafficResults) {

      if(err) return cb(err); // error out and return err msg to client

      let graphData = {
        // properties to support graph display
      };

      // loop on trafficResults to do Summation here
      // collect results inside graphData

      // return clean graphData to client
      cb(null, graphData);

    });

  }

  Traffic.remoteMethod('getGraphData', {
    accepts: [
      { arg: 'fromTime', type: 'number' },
      { arg: 'toTime', type: 'number' }
    ],
    returns: { arg: 'graphData', type: 'object' }
  });

};