2020年10月29-30日,上周,参加了金科创新社主办的“智变科技”论坛,会议组织者辛苦!下图是部分参会者合影。
本人在此次论坛上,应邀演讲了“产品思维驱动数字化转型”,讲的如何不知道,演得还可以,从掌声上听,也还可以!
我的ppt,原创的,目录和部分截图如下,感兴趣的,可索取,感谢金科创新社做了UI,高大上了很多。
开始,继续我的小程序之旅!数据库到本节就结束了,本节也是重头戏了,会SQL 的,就知道WHERE的重量了。
本节较多滴整合、采纳(照搬)了微信开发者文档内容,通过整合,把where这个事儿说清楚了,但又出来一个command,这个回头再说,先知道where怎么用,先不管那么多。
在小程序之二十 数据库之2基本逻辑和查询操作中,有这样的话,“一个数据库可以有多个集合,集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。这个话很重要,查询成功后,回调函数得到结果是满足条件的对应记录的对象数组”。本节说的是如何得到多条记录,也就是对应SQL里面的where语句。通过调用集合上的 where
方法可以指定查询条件,再调用 get
方法即可返回满足指定查询条件的记录,例如:
db.collection('todos').where({
_openid: 'user-open-id',
done: false
})
.get({
success: function(res) {
// res.data 是包含以上定义的两条记录的数组
console.log(res.data)
}
})
where
方法接收一个对象参数,该对象中每个字段和它的值构成一个需满足的匹配条件,各个字段间的关系是 "与" 的关系,即需同时满足这些匹配条件,在这个例子中,就是查询出 todos 集合中 _openid
等于 user-open-id
且 done
等于 false
的记录。在查询条件中我们也可以指定匹配一个嵌套字段的值,比如找出自己的标为黄色的待办事项:
db.collection('todos').where({
_openid: 'user-open-id',
style: {
color: 'yellow'
}
})
.get({
success: function(res) {
console.log(res.data)
}
})
也可以用 "点表示法" 表示嵌套的字段:
db.collection('todos').where({
_openid: 'user-open-id',
'style.color': 'yellow'
})
.get({
success: function(res) {
console.log(res.data)
}
})
如果不是“等”呢?假设我们查询进度大于 50% 的待办事项,那么表示全等匹配的传入对象参数方式就不行了,这时需要用到查询指令。
数据库 API 提供了大于、小于等多种查询指令,这些指令暴露在 db.command
对象上。比如查询进度大于 50% 的待办事项:
//这是一个小的框架了,按照它的样子写吧,没啥道理可言的
const db = wx.cloud.database();
const _ = db.command ;//注意这条语句
db.collection('todos').where({
// gt 方法用于指定一个 "大于" 条件,此处 _.gt(30) 是一个 "大于 50" 的条件
progress: _.gt(50)
})
.get({
success: function(res) {
console.log(res.data)
}
})
API 提供了以下查询指令:
查询指令 | 说明 |
---|---|
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 小于或等于 |
gt | 大于 |
gte | 大于或等于 |
in | 字段值在给定数组中 |
nin | 字段值不在给定数组中 |
逻辑指令
除了指定一个字段满足一个条件之外,我们还可以通过指定一个字段需同时满足多个条件,比如用 and
逻辑指令查询进度在 30% 和 70% 之间的待办事项:
const _ _.gt.and(_.lt(
既然有 and
,当然也有 or
了,比如查询进度为 0 或 100 的待办事项:
const _ _.eq(0).or(_.eq(100))
如果需要跨字段进行 "或" 操作,可以做到吗?答案是肯定的,or
指令还可以用来接受多个(可以多于两个)查询条件,表示需满足多个查询条件中的任意一个,比如我们查询进度小于或等于 50% 或颜色为白色或黄色的待办事项:
const _ = db.command
db.collection('todos').where(_.or([
{
progress: _.lte(50)
},
{
style: {
color: _.in(['white', 'yellow'])
}
}
]))
.get({
success: function(res) {
console.log(res.data)
}
})
具体的逻辑查询指令 API 文档可参考数据库 Command API 文档。
哈哈,最后,加播一个朋友发的朋友圈图片,有意思: