美文网首页web全栈
Sequelize V5.9.4 MVC模式(三 | 基本条件查

Sequelize V5.9.4 MVC模式(三 | 基本条件查

作者: Mjhu | 来源:发表于2019-07-09 19:48 被阅读0次

    大家可以前往 Sequelize中文文档,查看 Sequelize不同版本【5.x、4.x】的文档

    本文档分多个篇章,难易程度从低到高,学习此篇章之前,务必确保自己已经掌握 node.jsexpress、es6语法、mysql等关系型数据库的sql语法等

    条件查询 where【承接 Sequelize V5.9.4 MVC模式(二)-- 单表

    无论你是通过 findAll/find 或批量 updates/destroys 进行查询,都可以传递一个 where对象来过滤查询.
    where通常用 attribute:value 键值对获取一个对象,其中 value可以是匹配等式的数据或其他运算符的键值对象.
    也可以通过嵌套 orand 运算符 的集合来生成复杂的 AND/OR 条件.

    *以下操作均在 User.Controller.js 中进行

    基本条件查询
    getUserInfo: async (req, res, next)=>{
            let users = await User.User.findAll({
                where: {//获取id在[1,2,3]中并且age=20的
                    id: [1,2,3], 
                    age: 20
                },
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    

    postman

    {
        "code": 200,
        "users": [
            {
                "id": 3,
                "username": "张三",
                "age": 20
            }
        ]
    }
    
    操作符查询

    操作符是对某个字段的进一步约束,可以有多个(对同一个字段的多个操作符会被转化为 AND

    5.x版本4.x版本大同小异,这里只介绍最新的5.x版本
    5.x版本需要在 User.Controller.js 引入以下代码

    import Sequelize from 'sequelize'
    const Op = Sequelize.Op;//通过Op调用对应操作符
    
    getUserInfo: async (req, res, next)=>{
            let users = await User.User.findAll({
                where: {
                    id: {
                        [Op.eq]: 1,                // id = 1
                        [Op.ne]: 2,                // id != 2
                        [Op.gt]: 6,                // id > 6
                        [Op.gte]: 6,               // id >= 6
                        [Op.lt]: 10,               // id < 10
                        [Op.lte]: 10,              // id <= 10
                        [Op.between]: [6, 10],     // id BETWEEN 6 AND 10
                        [Op.notBetween]: [11, 15], // id NOT BETWEEN 11 AND 15
                        [Op.in]: [1, 2],           // id IN (1, 2)
                        [Op.notIn]: [3, 4]         // id NOT IN (3, 4)
                    },
                    username: {
                        [Op.like]: '%m%',          // username LIKE '%m%'
                        [Op.notLike]: '%m'         // username NOT LIKE '%m'
                    },
                    updated_at: {
                        [Op.eq]: null,             // updated_at IS NULL
                        [Op.ne]: null              // updated_at IS NOT NULL
                    }
                },
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    
    AND条件
    getUserInfo: async (req, res, next)=>{
            let users = await User.User.findAll({
                where: {//获取id在[7,8,9]中并且username中包含m的数据
                    [Op.and]: [
                        {id: [7,8,9]},
                        {username: {
                            [Op.like]: '%M%'
                        }}
                    ]
                },
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    
    OR条件
    getUserInfo: async (req, res, next)=>{
            let users = await User.User.findAll({
                where: {//获取id在[7,8,9]中或者username中包含m的数据
                    [Op.or]: [
                        {id: [7,8,9]},
                        {username: {
                            [Op.like]: '%M%'
                        }}
                    ]
                },
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    
    排序 order
    getUserInfo: async (req, res, next)=>{
            let users = await User.User.findAll({
                order: [
                  ['id', 'DESC'] 
                ],
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    
    分页查询 limit offset
    getUserInfo: async (req, res, next)=>{
            let {offset, limit} = req.query;
            let users = await User.User.findAll({
                limit: parseInt(limit),
                offset: parseInt(offset),
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    

    到此为止,条件查询 where就介绍的差不多了,接下来介绍其他的查询方法

    查询一条数据 findOne
    getUserInfo: async (req, res, next)=>{
            let {id} = req.query;
            let users = await User.User.findOne({
                where: {
                    id: parseInt(id),
                },
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    
    查询并获取数量 findAndCountAll
    getUserInfo: async (req, res, next)=>{
            let users = await User.User.findAndCountAll({
                attributes: ['id', 'username', 'age']
            });
            res.send({
                code: 200,
                users
            })
        }
    

    postman

    {
        "code": 200,
        "users": {
            "count": 8,
            "rows": [
                {
                    "id": 1,
                    "username": "Mjhu",
                    "age": 16
                }... //此处省略7条数据
            ]
        }
    }
    
    批量插入 bulkCreate
    insertUser: async (req, res, next) => {
            // let {username} = req.body;
            let user = await User.User.bulkCreate([
                {username: String(Math.random())},//这里模拟批量插入
                {username: String(Math.random())},
                {username: String(Math.random())},
                ]);
            res.send({
                code: 200,
                data: user
            })
        }
    

    批量更新 update

    updateUser: async (req, res, next)=>{
            // let {id, age} = req.body;
            let updateUserCount = await User.User.update({
                username: '已重置'
            },{
                where: {id: [10, 11, 12]}
            });
            res.send({
                code: 200,
                data: '修改成功',
                updateUserCount 
            })
        },
    

    postman

    {
        "code": 200,
        "data": "修改成功",
        "updateUserCount": [
            3
        ]
    }
    
    批量删除 destroy
    deleteUser: async (req, res, next)=>{
            // let {id} = req.body;
            let deleteUserCount = await User.User.destroy({
                where: {id: [10,11,12]}
            });
            res.send({
                code: 200,
                data: '注销成功',
                deleteUserCount
            })
        },
    

    postman

    {
        "code": 200,
        "data": "注销成功",
        "deleteUserCount": 3
    }
    

    好了,到此为止,Sequelize V5.9.4 单表的增删查改以及条件查询就讲完了,更多知识补充可以前往Sequelize 官方文档 查询,下一章节咱们介绍 Sequelize V5.9.4 中数据表的关系:一对一,下一章节再见!

    相关文章

      网友评论

        本文标题:Sequelize V5.9.4 MVC模式(三 | 基本条件查

        本文链接:https://www.haomeiwen.com/subject/cbifkctx.html