模型提供了多种方法来查询数据:

  • find 查询单条数据
  • select 查询多条数据
  • count 查询总条数
  • countSelect 分页查询数据
  • max 查询字段的最大值
  • avg 查询字段的平均值
  • min 查询字段的最小值
  • sum 对字段值进行求和
  • getField 查询指定字段的值

1)find 查询单条语句

  model.find(options)

  • options {Object} 操作选项,会通过 parseOptions 方法解析
  • return {Promise} 返回单条数据

  查询单条数据,返回的数据类型为对象。如果未查询到相关数据,返回值为 {}

  module.exports=class extends think.Controller{

    async listAction(){

      let model =this.model('user');

      let data=await model.where({name: 'thinkjs'}).find();

      //data returns {name: 'thinkjs', email: 'admin@thinkjs.org,...'}

      if(think.isEmpty(data)){

      //内容为空时的处理

      }

    }

  }

可通过think.isEmpty 方法判断返回值是否为空。

2)select查询多条语句

  model.select(options)

  •   options{Object} 操作选项
  •   return{Promise} 返回多条数据

  查询多条数据,返回的数据类型为数组。如未查询到相关数据,返回值为[ ].

  module.exports=class extends think.Controller {

    async listAction(){

      let model=this.model('user');

      let data=await model.limit(2).select();

      //data returns [{name:'thinkjs',email: 'admin@thinkjs.org'},...]

      if(think.isEmpty(data)){

      }

    }

  }

可通过think.isEmpty方法判断返回值是否为空。

3)count 返回总条数

  model.count(field)

  •   field{String} 字段名,如果不指定那么值为 *
  •   return{Promise} 返回总条数

  获取总条数。

  module.exports = class extends think.Model{

    //获取字段值之和

    getScoreCount(){

      //SELECT COUT (score) AS think_count FROM 'test_d' LIMIT 1

      return this.count('score');

    }

  }  

    

   model.sum(field)

  •   field{String} 字段名
  •   return{Promise} 返回总条数

  对字段值进行求和。

  module.exports = class extends think.Model{

    //获取字段值之和

    getScoreCount(){

      //SELECT SUM(score) AS think_sum FROM 'test_d' LIMIT 1

      return this.sum('score');

    }

  }

  

  model.min(field)

  •   field{String} 字段名
  •   return{Promise}

  求字段的最小值。

  module.exports = class extends think.Model{

    //获取字段最小值

    getScoreMin(){

      //SELECT MIN (score) AS think_min FROM 'test_d' LIMIT 1

      return this.min('score');

    }

  }    

  model.max(field)

  •   field{String} 字段名
  •   return{Promise}

  求字段的最大值。

  module.exports = class extends think.Model{

    //获取字段最大值

    getScoreMax(){

      //SELECT MAX (score) AS think_max FROM 'test_d' LIMIT 1

      return this.max('score');

    }

  } 

  

  model.avg(field)

  •   field{String} 字段名
  •   return{Promise}

  求字段的平均值。

  module.exports = class extends think.Model{

    //获取平均分

    getScoreCount(){

      //SELECT AVG (score) AS think_avg FROM 'test_d' LIMIT 1

      return this.avg('score');

    }

  } 

4) getField 查询指定字段的值

  model.getField(field,num)

  •   field{String} 字段名,多个字段用逗号隔开
  •   num {Boolean |Number} 需要的条数
  •   return{Promise}

  获取特定字段的值,可以设置where/group等条件

  获取单个字段的所有列表

  module.exports = class extends think.Controller{

    async listAction(){

      const data=await this.model('user').getField('c_id');

      //data=[1,2,3,4,5]

    }

  }

  指定个数获取单个字段的列表 

  module.exports = class extends think.Controller{

    async listAction(){

      const data=await this.model('user').getField('c_id',3);

      //data=[1,2,3]

    }

  }

  获取单个字段的一个值  

   module.exports = class extends think.Controller{

    async listAction(){

      const data=await this.model('user').getField('c_id',true);

      //data=1

    }

  }

  获取多个字段的所有列表

   module.exports = class extends think.Controller{

    async listAction(){

      const data=await this.model('user').getField('c_id,d_name');

      //data={c_id: [1,2,3,4,5], d_name:[ 'a', 'b', 'c' ,'d' ,'e']}

    }

  }

 获取指定个数的多个字段的所有列表

   module.exports = class extends think.Controller{

    async listAction(){

      const data=await this.model('user').getField('c_id,d_name,3');

      //data={c_id: [1,2,3], d_name:[ 'a', 'b', 'c' ]}

    }

  }

 获取多个字段的单一值

   module.exports = class extends think.Controller{

    async listAction(){

      const data=await this.model('user').getField('c_id,d_name',true);

      //data={c_id: 1, d_name: 'a'}

    }

  }

5)countSelect 分页查询数据

  model.countSelect(options,pageFlag)

  •   options{Number|Object}操作选项,会通过parseOptions方法解析
  •   pageFlag{Boolean}当页数不合法时处理,true为修正到第一页,false为修正到最后一页,默认不修正
  •   return{Promise}

  分页查询,一般需要结合page方法一起使用。

  module.exports = class extends think.Controller{

    async listAction(){

      let model =this.model('user');

      let data=await model.page(this.get('page')).countSelect();

    }

  }

  返回值结构如下:

  {
    pageSize: 10,              //每页显示的条数, think-model@1.1.8 之前该字段为 pagesize
    currentPage: 1,           //当前页
    count: 100,                 //总条数
    totalPages: 10,           //总页数
    data: [{                       //当前页下的数据列表
      name: "thinkjs",
      email: "admin@thinkjs.org"
    }, ...]
  }

  有时候总条数是放在其他表存储的,不需要再查当前表获取总条数了,这个时候可以通过将第一个参数 options 设置为总条数来查询

  module.exports = class extends think.Controller {
    async listAction(){
      const model = this.model('user');
      const total = 256;
      // 指定总条数查询
      const data = await model.page(this.get('page')).countSelect(total);
    }
  }

Thinkjs关系数据库学习——查询数据的更多相关文章

  1. SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

    目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...

  2. mysql学习【第3篇】:使用DQL查询数据

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第3篇]:使用DQL查询数据 DQL语言 DQL( Data Query Lan ...

  3. MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)

    知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...

  4. MySQL学习——查询表里的数据

    MySQL学习——查询表里的数据 摘要:本文主要学习了使用DQL语句查询表里数据的方法. 数据查询 语法 select [distinct] 列1 [as '别名1'], ..., 列n [as '别 ...

  5. MySQL基础学习之数据查询

    一般查询 SELECT * FROM 表名 SELECT 属性名  FROM  表名 条件查询 SELECT 属性名 FROM 表名  WHERE 条件表达式 查询数据值1,数据值2的表单 SELEC ...

  6. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  7. flask再学习-思考之怎么从数据库中查询数据在页面展示!

    看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...

  8. 吴裕雄--天生自然MySQL学习笔记:MySQL 查询数据

    MySQL 数据库使用SQL SELECT语句来查询数据. 可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MySQL数据库中查询数据通用 ...

  9. android: SQLite查询数据

    掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...

随机推荐

  1. Struts2实现文件上传(四)

    Struts2实现文件上传 配置文件struts.xml <!-- /* * $Id: struts.xml 1364077 2012-07-21 12:57:02Z lukaszlenart ...

  2. Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

    1.错误描述 2014-7-12 21:06:37 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreat ...

  3. 使用WebApiClient请求和管理Restful Api

    前言 本篇文章的内容是WebApiClient应用说明篇,如果你没有了解过WebApiClient,可以先阅读以下相关文章: WebApi client 的面向切面编程 我来给.Net设计一款Http ...

  4. ASP.NET WebAPI String 传值问题

    如果我们再WebAPI中定义了只有一个string参数的WebAPI函数,如下所示: [HttpPost] public string TrackBill(string str) { return s ...

  5. @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式

    在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...

  6. ubuntu安装latex

    1 终端中输入"sudo apt-get install texlive-full",输入root密码. 若不想安装所有文件,可以选择"sudo apt-get inst ...

  7. C#图解教程 第二十二章 异常

    异常 什么是异常try语句 处理异常 异常类catch 子句使用特定catch子句的示例catch子句段finally块为异常寻找处理程序更进一步搜索 一般法则搜索调用栈的示例 抛出异常不带异常对象的 ...

  8. docker进阶-搭建私有企业级镜像仓库Harbor

    为什么要搭建私有镜像仓库   对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们 ...

  9. JavaScript之中级教程关键

    Date() setTime()getTime()toUpperCase() toLowerCase() charAt() 返回指定的字符,返回的字符长度为1的字符串. indexOf('需要检索的字 ...

  10. iframe结构的项目,登录页面嵌套

    参考:http://www.cnblogs.com/qixin622/p/6548076.html 在网页编程时,我们经常需要处理,当session过期时,我们要跳到登陆页面让用户登陆,由于我们可能用 ...