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

  • 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. 4-20mA 意义

    工业上最广泛采用的标准模拟量电信号是用4~20mA直流电流来传输模拟量. 采用电流信号的原因是不容易受干扰.并且电流源内阻无穷大,导线电阻串联在回路中不影响精度,在普通双绞线上可以传输数百米.上限取2 ...

  2. java将字符串转换为指定的时间格式

    *String dateString = "18:31:43";    try {     Date date = new SimpleDateFormat("HH:mm ...

  3. RobotFramework下HttpLibrary库其它关键字

    关键字 使用描述 DELETE 向服务器端发送http delete请求,该请求接收一个参数[ url ],请求的方式和post请求非常类似,示例: DELETE /_utils/config.htm ...

  4. 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)

    洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...

  5. 【BZOJ4653】【NOI2016】区间(线段树)

    [BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...

  6. 使用 vscode将本地项目上传到github以及删除github上的某个文件夹

    安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI是可视化图形界面 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能 ...

  7. mysql的下载安装

    不知道为什么,写这篇文章我总是想感慨一下.首先我的感谢和敬佩那些能把知识和技术分享出来的开发者,不管你的技术是否很牛,但是你的精神让我十分敬佩.学java的已经二天了,除了问问朋友,给我最大帮助的就是 ...

  8. IDEA 使用tomcat7-maven-plugin

    使用了这个插件就不需要配置tomcat了,直接用maven去run就行 配置方法:pom里添加:(之所以用tomcat7是因为如果直接用依赖下载很难下载到tomcat8-maven-plugin,详情 ...

  9. Java 对IP请求进行限流.

    高并发系统下, 有三把利器 缓存 降级 限流. 缓存: 将常用数据缓存起来, 减少数据库或者磁盘IO 降级: 保护核心系统, 降低非核心业务请求响应 限流: 在某一个时间窗口内对请求进行限速, 保护系 ...

  10. WebService下实现大数据量的传输

    设置RemotingFormat = SerializationFormat.Binary;再序列化,通过WebService传输,客户端接收,再反序列化,确实效果大大的优于直接传送DataSet,不 ...