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

  • 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. VS2008下QT开发环境搭建(转)

    原博文地址:http://blog.csdn.net/sunnyboycao/article/details/6364444 VS2008集成QT4.7.2环境搭建 作者:jimmy 日期:2011- ...

  2. CF374 Maxim and Array

    贪心 如果有0先变成非0 如果负数的个数 应该变为偶数 之后就是每次将绝对值最小的值加K #include<bits/stdc++.h> using namespace std; cons ...

  3. Luogu3242:[HNOI2015]接水果

    题面 Luogu3242 Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的\(x, y\)在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录 ...

  4. Python模块之hashlib模块、logging模块

    一.hashlib模块 hashlib模块介绍:hashlib这个模块提供了摘要算法,例如 MD5.hsa1 摘要算法又称为哈希算法,它是通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个 ...

  5. Redis之Set

    一.Redis之Set简介 1. Set是String类型的无序集合(元素成员唯一). 2. Set是通过hash表实现的,添加.删除.查找的复杂度都是O(1). 3. 每个集合最大成员数为232-1 ...

  6. jQuery中append appendTo prepend prependTo insertBefore insertAfter after before之间的区别

    jQuery中有一个很关键的元素操作,他们的使用方法都一样,但是呈现的结果有所不同. <!DOCTYPE html> <html lang="en"> &l ...

  7. div闪一下就消失

    <div id="saveCode" class="center" style="display:none;width:300px;height ...

  8. C++编程理论学习笔记

    1.变量: 变量的值都存储在内存中.内存中每个单元都有一个唯一的编号,就是单元的地址,变量在运行时占据内存单元互不相同的地址,C++的目标代码靠地址来区别不同的变量. 2.表达式: 虽然内存是存储c+ ...

  9. handsontable 合并单元格

    <!DOCTYPE html> <html> <head> <title>handsontable demo</title> <met ...

  10. PHP/JAVA 杂谈 一(php 槽点)

    [本文为个人意见,不喜就喷吧!] 最近,同事问到我,『那时候为什么从PHP转成Java?』,我想了很久,且撇开主观上的原因,当初业务重构使用java确实有很多可以说道的地方. 槽点1:哪有最好的语言, ...