首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sequelize.js,计算关联项数

sequelize.js,计算关联项数
EN

Stack Overflow用户
提问于 2013-12-06 06:01:30
回答 2查看 2.3K关注 0票数 3

我正在尝试只获取相关项目的计数。这就是你所期望的:

代码语言:javascript
复制
var options = { 
  where: { 
    username: { like: '%' + q + '%'}}, 
    include: [Transaction]
  }};

User.findAll(options).success(function (users) {
  res.json(users);
});

但是,为了立即获得计数,我必须遍历每个用户,对事务进行计数,获取dataValues,并手动修改dataValues对象的新属性(transactionCount)。

我觉得应该有一种更干净的方式来做这件事(也许使用伪属性?)但答案却让我摸不着头脑。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 11:48:08

这样如何:

代码语言:javascript
复制
var options = { 
  where: { 
    username: { like: '%' + q + '%'}}, 
    include: [Transaction]
  }};

User.findandCountAll(options).success(function (users) {
  res.json(users);
});

详情请访问:http://sequelizejs.com/documentation#models-finders

票数 -1
EN

Stack Overflow用户

发布于 2013-12-07 00:01:37

在只有一个关联模型的情况下,我能够迭代每个用户,计算关联的事务,然后将用户数据值复制到一个单独的数组中,并将其发送到客户端。

代码语言:javascript
复制
var values = [],
    i;

 for (i = 0; i < users.length; i++) {
  var user = users[i],
      userValues = users[i].dataValues;
   if (userValues.hasOwnProperty('username')) {
    userValues.transactions = (!!user.transactions) ? user.transactions.length : 0;
    values.push(userValues);
  }
}

在需要两个关联模型的计数的情况下,我最终使用原始SQL来获取事务和帐户的计数。然后,我使用类似于上面的方法将值手动添加到基本模型中。注意:您需要重命名查询中的字段,否则Sequelize将解释句点(.)以一种不友好的方式分配属性,比如COUNT(Tid)

代码语言:javascript
复制
var query = 'SELECT A.id AS id, ' +
  'COUNT(T.id) AS transactions, ' +
  'COUNT(DISTINCT U.username) AS users ' +
  'FROM Users U, Transactions T, Accounts A ' +
  'WHERE U.accountId = A.id ' +
  'AND T.username = U.username ' +
  'AND U.accountId IN (' + ids.join(',') + ') ' +
  'GROUP BY U.username';
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20411718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档