云开发(微信-小程序)笔记(四)---- 还有吗?再来点
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)
})
}
})
感谢大家,点赞,收藏,关注,评论!