云开发(微信-小程序)笔记(四)---- 还有吗?再来点
12.查询数据
在记录和集合上都有提供 get 方法用于获取单个记录或集合中多个记录的数据。
(1)单条数据的查询
例:假设我们已有一个 ID 为 0a4ec1f9626a370b00add72c37a74001 的在集合 Goods 上的记录,那么我们可以通过在该记录的引用调用 get 方法获取这个待办事项的数据
<!--pages/skip/skip.wxml-->
<view bindtap="getdate">
商品名:{{data.name}},价格:{{data.price}},生产地:{{data.shengchandi}}
</view>
// pages/skip/skip.js
Page({  
  onLoad() {
    this.getdate()
     },
  //查询单条数据
  getdate(){
    let db = wx.cloud.database()
    db.collection('Goods')             //查询的数据集合为Goods
    .doc('0a4ec1f9626a370b00add72c37a74001') //某一条数据的id
    .get()
    .then(res => {
    console.log('查询到该记录的数据',res)
    this.setData({
      data:res.data
    })
  })
    .catch(res =>{
    console.log('没有该记录的数据',res)
    })
  }
})
效果如图
 
(2)多条语句的查询
我们也可以一次性获取多条记录。通过调用集合上的 where 方法可以指定查询条件,再调用 get 方法即可只返回满足指定查询条件的记录
例如:查询集合的所有数据
<!--pages/skip/skip.wxml-->
<view wx:for="{{goods}}">
<view bindtap="getdates">
商品名:{{item.name}},价格:{{item.price}},生产地:{{item.shengchandi}}
</view>
</view>
// pages/skip/skip.js
let db = wx.cloud.database()
Page({  
  onLoad() {
    this.getdates()
 },
  //查询集合数据
  getdates(){
  db.collection('Goods')
  .get()
  .then(res => {
    console.log('数据请求成功!', res)
    this.setData({
      goods: res.data
    })
  })
  .catch(res => {
    console.log('数据请求失败!', res)
  })
}
})
效果如图
 
 注意:
 为了防止误操作以及保护小程序体验,小程序端在获取集合数据时服务器一次默认并且最多返回 20 条记录,云函数端这个数字则是 100。
13.指令(Command数据库操作符)
使用数据库 API 提供的 where 方法我们可以构造复杂的查询条件完成复杂的查询任务。
(1)查询指令
指定一个字段满足一个条件
API 提供了以下查询指令:
| 查询指令 | 说明 | 
|---|---|
| eq | 等于 | 
| neq | 不等于 | 
| lt | 小于 | 
| lte | 小于或等于 | 
| gt | 大于 | 
| gte | 大于或等于 | 
| in | 字段值在给定数组中 | 
| nin | 字段值不在给定数组中 | 
例如:查询商品中价格小于4的商品(lt)
<!--pages/skip/skip.wxml-->
<view wx:for="{{good}}">
<view bindtap="four">
商品名:{{item.name}},价格:{{item.price}},生产地:{{item.shengchandi}}
</view>
</view>
// pages/skip/skip.js
let db = wx.cloud.database()
Page({
  onLoad() {
    this.four()
  },
  //查询商品中价格小于4的商品
  four() {
    const _ = db.command
    db.collection('Goods').where({
        // lt 方法用于指定一个 "小于" 条件,此处 _.lt(4) 是一个 "小于4" 的条件
        price: _.lt(4)
      })
      .get()
      .then(res => {
        console.log('成功', res.data)
        this.setData({
          good: res.data
        })
      })
      .catch(res => {
        console.log('失败', res.data)
      })
  }
})
效果如图
 
(2)逻辑指令
指定一个字段需同时满足多个条件
| 逻辑指令 | 说明 | 
|---|---|
| and | 逻辑与,两个条件同时满足 | 
| or | 逻辑或,满足一个条件 | 
| not | 逻辑非,不满足条件 | 
| nor | 逻辑 “都不”,不满足指定的所有条件 | 
例如:查找商品价格在2~10之间的商品(and)
<!--pages/skip/skip.wxml-->
<view wx:for="{{good}}">
<view bindtap="two">
商品名:{{item.name}},价格:{{item.price}},生产地:{{item.shengchandi}}
</view>
</view>
// pages/skip/skip.js
let db = wx.cloud.database()
Page({
  onLoad() {
    this.two()
  },
  //查询商品中价格小于2~10的商品
  two() {
    const _ = db.command
    db.collection('Goods').where(_.and([
      {
        price: _.lte(10)
      },{
        price: _.gte(2)
      }
    ]))
      .get()
      .then(res => {
        console.log('成功', res.data)
        this.setData({
          good: res.data
        })
      })
      .catch(res => {
        console.log('失败', res.data)
      })
  }
})
(3)字段指令
| 逻辑指令 | 说明 | 
|---|---|
| exists | 判断字段是否存在 | 
| mod | 取模 | 
例如:找出存在 price 字段的记录,
// pages/skip/skip.js
let db = wx.cloud.database()
Page({
  onLoad() {
    this.exist()
  },
//查询price是否存在
  exist() {
    const _ = db.command
    db.collection('Goods').where({
      price: _.exists(true)
    })
  .get()
  .then(res => {
    console.log('存在', res.data)
    this.setData({
      good: res.data
    })
  })
  .catch(res => {
    console.log('不存在', res.data)
  })
}
(4)地理位置指令
| 逻辑指令 | 说明 | 
|---|---|
| geoNear | 按从近到远的顺序,找出字段值在给定点的附近的记录。 | 
| geoWithin | 找出字段值在指定区域内的记录,无排序。指定的区域必须是多边形(Polygon)或多边形集合(MultiPolygon)。 | 
| geoIntersects | 找出给定的地理位置图形相交的记录 | 
(1)geoNea的参数
| 属性 | 类型 | 必填 | 说明 | 
|---|---|---|---|
| geometry | GeoPoint | 是 | 地理位置点 (Point) | 
| maxDistance | number | 否 | 选填,最大距离,单位为米 | 
| minDistance | number | 否 | 选填,最小距离,单位为米 | 
(2)geoWithin参数
| 属性 | 类型 | 必填 | 说明 | 
|---|---|---|---|
| geometry | Object | 是 | 地理信息结构,Polygon,MultiPolygon,或 { centerSphere } | 
(3)geoIntersects参数
| 属性 | 类型 | 必填 | 说明 | 
|---|---|---|---|
| geometry | Object | 是 | 地理信息结构,Point | 
上面的地理位置指令有点复杂,看不懂的直接跳过。
还有很多相关的指令,如数组等,这里就不一一介绍了!
 大家可以查询官方文档,进行学习.
14.高级用法(简单)
关于数据库高级用法知识点还有很多,这里我就简单介绍两个
limt:限制输出到下一阶段的记录数
skip:指定一个正整数,跳过对应数量的文档,输出剩下的文档
案例:限制从第几条数据开始查询,每次查询显示几条数据.
// pages/skip/skip.js
let db = wx.cloud.database()
Page({
  onLoad() {
    this.getdate()
    db.collection('Goods')
    .limit(2) //每次显示几条数据
    .skip(0) //从第几条数据开始读
    .get()
    .then(res => {
      console.log('请求成功',res)
    })
    .catch(res => {
      console.log('请求失败',res)
    })
  }
})

 感谢大家,点赞,收藏,关注,评论!
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号