如何使用sequelize(mysql)来计算angularjs + nodejs的数据?

时间:2017-11-15 06:14:39

标签: mysql node.js sequelize.js

我在 mysql

中有三个表
  1. 联系
  2. ContactGroup
  3. 这是我的表结构:

    var Contact = sequelize.define('contact', {
        gsm: {
            type: Sequelize.STRING,
            unique: true,
            required: true
        },
        firstName: Sequelize.STRING,
        lastName: Sequelize.STRING,
        street: Sequelize.STRING,
        city: Sequelize.STRING,
        region: Sequelize.STRING,
        postcode: Sequelize.STRING,
        dob: Sequelize.DATE,
        email: {
            type: Sequelize.STRING,
            unique: true,
            defaultValue: true
        },
        company: Sequelize.STRING,
        url: Sequelize.STRING,
        country: Sequelize.STRING,
        data1: Sequelize.STRING,
        data2: Sequelize.STRING,
        data3: Sequelize.STRING,
        //  resetPasswordToken: Sequelize.STRING,
        //  resetPasswordExpires: Sequelize.DATE,
        //  lastLoggedIn: Sequelize.DATE
    })
    
    
    var Group = sequelize.define('group', {
        groupname: {
            type: Sequelize.STRING,
            unique: true,
            required: true
        },
    })
    
    var ContactGroup = sequelize.define('contactgroup', {
        /* Empty */
    })
    
    ContactGroup.belongsTo(Contact, {
        onDelete: 'CASCADE'
    });
    ContactGroup.belongsTo(Group, {
        onDelete: 'CASCADE'
    });
    
    Group.hasMany(ContactGroup, {
        onDelete: 'CASCADE'
    });
    

    我的情景: 我的项目中有两个UI:

    1.Contact 2.Group

    第1步:第一位用户可以添加组,然后用户将创建新联系人,此联系人可能包含多个组或没有组(组数据来自组中的下拉列表表,用户在STEP 1上完成此操作

    例如实时情景:

    我是进入申请的用户,

    第1步:我将添加一个名为'angulargroup'的新组。

    第2步:我会在联系人中添加我的详细信息,然后在下拉列表中选择 angulargroup ,这样我就可以属于angulargroup 现在用户互动。

    现在我获得了联系人ID和组ID,我将这个组ID和联系人ID存储在我的名为 ContactGroup 的表中,如下所示:

    enter image description here

    所以最后帮我展示小组的数量:

    我在 angulargroup 中只添加了一个联系人,因此我想在下图中将 CONTACT COUNT 显示为1:

    enter image description here

    如果我在contactcount位置的 angulargroup 中添加了两个联系人,我想将contactcount显示为 2

    我的api.js代码:

    exports.getNewGroup = function(req, res) {
        Group.findAndCountAll({
            attributes: ['id', [sequelize.fn('COUNT', sequelize.col('contactgroups.groupId')),
                'contactCount'
            ]],
            include: [{
                model: ContactGroup,
            }]
        }).then(function(data) {
            return res.status(200).send(data);
        }).catch(function(err) {
            return res.status(400).send(err.message);
        });
    };
    

    现在如何在UI中显示:

    table.table
     tr
      th(style='display : none;') S.no
      th Name
      th Contacts Count
     tr(ng-repeat='group in groups | filter:test')
      td(style='display : none;') {{$index+1}}
      td {{group.groupname}}  
      td {{group.contactId}}
    

1 个答案:

答案 0 :(得分:0)

最后我明白了:

以下是答案:

我的api.js:

exports.getNewGroup = function (req, res) {
    Group.findAll({
        attributes: {
            include: [
                [sequelize.fn('COUNT', sequelize.col('contactgroups.groupId')), 'contactsCount']
            ],
        },
        include: [{
            model: ContactGroup,
            attributes: [],
        }],
        group: ['Group.id'],
        raw: true
    }).then(function (data) {
        return res.status(200).send(data);
    }).catch(function (err) {
        return res.status(400).send(err.message);
    });
};