微信小程序的云数据库,无需搭建繁琐的服务器,一个人前后端全包,接单必备
原文链接
(1)插入数据
- 获取数据库/数据表的引用
// 获取默认数据库的引用
// const db = wx.cloud.database()
// 获取指定数据库的引用
const db = wx.cloud.database({
env: "debug-b14e9b"
})
// 获取数据表的引用
const book = db.collection('book')
- 插入记录
// 获取默认数据库的引用
const db = wx.cloud.database()
// 插入数据库
db.collection('book').add({
data: {
"name": "寻秦记",
"show": true,
"price": 50.0,
"tasg": ["科幻", "悬疑"],
"update": new Date('2019-10-01'),
"location": new db.Geo.Point(113, 23),
"extra": null,
"desp": {
"color": "red",
"size": 340.0
}
},
success: function(res) {
// {errMsg: "collection.add:ok",id: "72527ac65df47f00032b5c9f07e529f9"}
console.log(res)
},
fail: function(err) {
console.log(err)
}
})
<a name="RLZ5t"></a>
(2)查询
- 获取指定id的一条记录
// 普通写法
const db = wx.cloud.database()
db.collection('book')
.doc('72527ac65df47f00032b5c9f07e529f9')
.get({
success: function(res) {
console.log(res.data)
}
})
// promise写法
db.collection('book')
.doc('72527ac65df47f00032b5c9f07e529f9')
.get()
.then(res => {
console.log(res.data)
})
- 条件查询
// 普通写法
const db = wx.cloud.database()
// promise写法
db.collection('book')
.where({
name: "唯一书名",
desp: {
color: 'red'
},
'desp.size': 340
})
.get()
.then(res => {
console.log(res.data)
})
- limit/skip:小程序默认一次性返回20,最多也不能超过20条;云函数端不能超过 100 条
// 普通写法
const db = wx.cloud.database()
// promise写法
db.collection('book')
.limit(2)
.skip(1)
.get()
.then(res => {
console.log(res.data)
})
- 使用云函数分页一次性取出所有数据
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
// 先取出集合记录总数
const countResult = await db.collection('book').count()
const total = countResult.total
// 计算需分几次取
const batchTimes = Math.ceil(total / 100)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < batchTimes; i++) {
const promise = db.collection('book').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
// 等待所有
return (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
}
})
}
// 调用云函数
// {
// errMsg: "cloud.callFunction:ok",
// result:
// data: (26) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
// errMsg: "collection.get:ok",
// requestID: "c65f11a9-1e40-11ea-bd46-525400235f2a"
// }
wx.cloud.callFunction({
name:'echo',
success:function(res){
console.log(res)
},
fail:function(err){
console.log("fail"+err)
}
})
- 查询指令
查询指令 | 说明 |
---|---|
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 小于或等于 |
gt | 大于 |
gte | 大于或等于 |
in | 字段值在给定数组中 |
nin | 字段值不在给定数组中 |
- 逻辑指令
- and
- or
const db = wx.cloud.database()
// 查询指令都在command中
const _ = db.command
db.collection('book').where({
price: _.gt(50).and(_.lt(100)),
name:_.in(['书名1'])
}).get({
success: function(res) {
console.log(res)
},
fail:function(err){
console.log(err)
}
})
<a name="BEdqP"></a>
(3)更新
- update/set更新/替换一条数据
const db = wx.cloud.database()
// 更新一个记录
db.collection('book').doc('72527ac65df47f00032b5c9f07e529f9')
.update({
data: {
price: 120
},
success: function(res) {
console.log(res)
}
})
// 替换一个记录
db.collection('book').doc('72527ac65df47f00032b5c9f07e529f9')
.set({
data: {
price: 120
},
success: function(res) {
console.log(res)
}
})
- 更新指令
更新指令 | 说明 |
---|---|
set | 设置字段为指定值 |
remove | 删除字段 |
inc | 原子自增字段值 |
mul | 原子自乘字段值 |
push | 如字段值为数组,往数组尾部增加指定值 |
pop | 如字段值为数组,从数组尾部删除一个元素 |
shift | 如字段值为数组,从数组头部删除一个元素 |
unshift | 如字段值为数组,往数组头部增加指定值 |
- set:将某个字段更新为一个对象
const db = wx.cloud.database()
const _ = db.command
// 更新一个记录
db.collection('book').doc('dbff9fc75df481bf032bc6f2331b4e33')
.update({
data: {
price: _.inc(10),
tasg:_.push('恐怖'),
// 将desp字段更新为另一个对象
desp:_.set({
color:'yanse'
}),
extra:_.remove()
},
success: function(res) {
console.log(res)
},
fail:function(err){
console.log(err)
}
})
- 云函数操作更新
const cloud = require('wx-server-sdk')
const db = cloud.database()
const _ = db.command
exports.main = async(event, context) => {
try {
return await db.collection('todos').where({
done: false
})
.update({
data: {
progress: _.inc(10)
},
})
} catch (e) {
console.error(e)
}
}
<a name="RtVLH"></a>
(4)删除数据
- 简单使用
const db = wx.cloud.database()
db.collection('book').doc('dbff9fc75df481bf032bc6f2331b4e33')
.remove({
success: function(res) {
console.log(res)
},
fail:function(err){
console.log(err)
}
})
网友评论