我正在尝试只获取相关项目的计数。这就是你所期望的:
var options = {
where: {
username: { like: '%' + q + '%'}},
include: [Transaction]
}};
User.findAll(options).success(function (users) {
res.json(users);
});但是,为了立即获得计数,我必须遍历每个用户,对事务进行计数,获取dataValues,并手动修改dataValues对象的新属性(transactionCount)。
我觉得应该有一种更干净的方式来做这件事(也许使用伪属性?)但答案却让我摸不着头脑。有什么建议吗?
发布于 2013-12-06 11:48:08
这样如何:
var options = {
where: {
username: { like: '%' + q + '%'}},
include: [Transaction]
}};
User.findandCountAll(options).success(function (users) {
res.json(users);
});详情请访问:http://sequelizejs.com/documentation#models-finders
发布于 2013-12-07 00:01:37
在只有一个关联模型的情况下,我能够迭代每个用户,计算关联的事务,然后将用户数据值复制到一个单独的数组中,并将其发送到客户端。
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(T和id)。
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';https://stackoverflow.com/questions/20411718
复制相似问题