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

  • 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. 在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用

    本人按照 http://blog.csdn.net/zzzblog/article/details/17166869 http://oliver.zheng.blog.163.com/blog/sta ...

  2. AM335x(TQ335x)学习笔记——触摸屏驱动编写

    前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题.由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱 ...

  3. tcp为什么要三次握手,而不能二次握手?

    谢希仁版<计算机网络>中的例子是这样的,"已失效的连接请求报文段"的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞 ...

  4. Flash Builder4.0运行应用程序报错

    1.错误描述 SecurityError: Error #2148: SWF 文件 file:///D:/Adobe Flash Builder 4 Installer/HVBox/bin-debug ...

  5. css 超出规定行数自动隐藏

     单行overflow: hidden;text-overflow: ellipsis;white-space: nowrap;  多行(兼容各个浏览器)//通过覆盖最后几个字的形式p{positio ...

  6. 【原】【译文】理解storm拓扑并行度

    原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html ...

  7. jQuery UI Autocomplete Combobox 配 ASP.NET DropDownList

    0.引言   1.起因                  一开始使用Autocomplete做了一个自动补全的文本框,如上图.后来因业务需要希望能在这个文本框的边上做个下拉列表按钮,一按就展开所有支持 ...

  8. HDU 1392 Surround the Trees(凸包)

    题面 懒得粘贴了... 大致题意:坐标系内有若干个点,问把这些点都圈起来的最小凸包周长. 题解 直接求出凸包,统计一遍答案即可 #include<iostream> #include< ...

  9. [CQOI2007]余数求和

    大于k的部分直接加k 对于小于等于k的cnt个数 ans=cnt*k - Σ(k/i * i) 然后k/i在一段区间内不变,这段区间直接可以数列求和 # include <bits/stdc++ ...

  10. 【Learning】带花树——一般图最大匹配

    一般图最大匹配--带花树 问题 ​ 给定一个图,求该图的最大匹配.即找到最多的边,使得每个点至多属于一条边. ​ 这个问题的退化版本就是二分图最大匹配. ​ 由于二分图中不存在奇环,偶环对最大匹配并无 ...