Cat-God-007

导航

云开发(微信-小程序)笔记(四)---- 还有吗?再来点

云开发(微信-小程序)笔记(三)---- 云数据库案例

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的参数

属性类型必填说明
geometryGeoPoint地理位置点 (Point)
maxDistancenumber选填,最大距离,单位为米
minDistancenumber选填,最小距离,单位为米

(2)geoWithin参数

属性类型必填说明
geometryObject地理信息结构,Polygon,MultiPolygon,或 { centerSphere }

(3)geoIntersects参数

属性类型必填说明
geometryObject地理信息结构,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)
    })
  }
})

云开发(微信-小程序)笔记(五)----云函数,就这(上)

在这里插入图片描述
感谢大家,点赞,收藏,关注,评论!

posted on 2022-05-01 12:08  成果和地方  阅读(17)  评论(0编辑  收藏  举报  来源