在loopback中获取属性的sum()而不循环遍历对象的所有实例

时间:2015-10-01 07:35:06

标签: javascript node.js loopbackjs strongloop

我的模型DummyModel具有attOneattTwoattThree属性。

要获取attOne的所有实例,可以使用 -

DummyModel.find({where: {attTwo: 'someValue'}, fields: {attOne: true} });

上述查询或多或少与MySQL查询 -

相对应
select attOne from DummyModel where attTwo = 'someValue'

但是,我需要找到从上面的查询返回的所有attOne值的总和。也就是说,MySQL相当于 -

select sum(attOne) from DummyModel where attTwo = 'someValue'

我读到环回并不支持聚合功能(即groupby)。但有没有办法获得sum(attOne)

我知道一种方法是获取对象,然后遍历所有实例并添加它。

我想知道的是,是否有任何预先存在的环回方法也可以这样做。

1 个答案:

答案 0 :(得分:1)

假设这段代码

f = DummyModel.find({where: {attTwo: 'someValue'}, fields: {attOne: true} });

返回一个这样的数组

[
{attTwo: 'someValue' ,attOne: 1}
{attTwo: 'otherValue',attOne: 1}
]

您可以使用reduce function将函数应用于所有元素

var sum = f.reduce(function(last, d) {return d.attOne + last},0);

这是工作代码

DummyModel = {
  find: function(a) {
    return [{
      attTwo: 'someValue',
      attOne: 1
    }, {
      attTwo: 'otherValue',
      attOne: 2
    }];
  }
}

f = DummyModel.find({
  where: {
    attTwo: 'someValue'
  },
  fields: {
    attOne: true
  }
});

sum = f.reduce(function(last, d) {
  return d.attOne + last;
}, 0);

alert(sum);