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

  • 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. 错误代码: 1111 Invalid use of group function

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:update t_user_info t inner join t_pro_ ...

  2. java.sql.SQLException: Access denied for user 'sa'@'localhost' (using password: NO)

    1.错误描述 INFO:2015-05-01 16:53:29[main] - HHH000228: Running hbm2ddl schema update INFO:2015-05-01 16: ...

  3. 【转】Nginx的启动、停止与重启

    Nginx的启动.停止与重启 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sb ...

  4. VS2017 启动调试报错:ID为{....}进程未启动解决方案

    今天遇到这么一个问题,打开VS启动调试,始终报错,如下图: 我重启VS,甚至重启电脑都不得行,那个进程号还在变化,就在网上查找资料,各式各样的解决方案,这里我记录我成功的方案. 打开项目文件地址,在解 ...

  5. [BZOJ3000] Big Number (Stirling公式)

    Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数——N,K Output 每行一个数为输出结果. Sample I ...

  6. 关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  7. js备战春招の四のdevtool中各种错误、调试的使用技巧

    try 语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. JavaScript 语句 try 和 catch 是成对出现的. ...

  8. CSS之盒子模型(深入理解)

    CSS--盒子模型(Box Model) 简介: CSS盒子模型本质上是一个盒子,对网页中绝大部分的HTML元素进行包装定位(外边距,边框,内边距以及实际内容). 但是并不是所有的HTML元素都可以看 ...

  9. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  10. mysql主从复制的基本原理

    怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:  1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修 ...