2020年2月13日
文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/security-rules.html
第一部分 数据库相关操作
一.获取数据库数据collection 相关操作
1.1collection.get
//测试collection get
testCollectionGet: function() {
//数据库获取
const db = wx.cloud.database();
db.collection("users").get({
success: res => {
console.log("command条件获取:", res.data);
},
fail: res => {
console.log('获取用户失败', res);
},
complete: res => {
console.log('获取用户执行完成', res);
}
});
},
1.2 collection.add
//测试collection add
testCollectionAdd: function() {
console.log("testCollectionAdd is called");
const db = wx.cloud.database();
db.collection("users").add({
data: {
username: "yan",
// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
description: "learn cloud database",
due: new Date("2020-02-14"),
tags: [
"好人",
"杭州人"
],
// 为待办事项添加一个地理位置(113°E,23°N)
location: new db.Geo.Point(113, 23),
},
//成功返回
success: res => {
console.log("collection add success", res);
},
//失败返回
fail: res => {
console.log("collection add faile", res);
},
//完成返回
complete: res => {
console.log("collection add compete");
},
});
},
1.3 获取collection数量 count
//测试collection Count
testCollectionCount:function(){
//数据库获取
const db = wx.cloud.database();
db.collection("users").count({
success: res => {
console.log("testCollectionCount user count", res);
console.log("testCollectionCount user.count =", res.total);
},
});
},
1.4collection.where语句
//测试collection Where
testCollectionWhere: function() {
//数据库获取
const db = wx.cloud.database();
db.collection("users").where({
gender:1,
username:"wangyu",
}).get({
success: res => {
console.log(res);
}
});
},
1.5 collection.orderBy
//测试排序
testCollectionOrderBy: function () {
//数据库获取
const db = wx.cloud.database();
db.collection("users").orderBy("gender","desc").orderBy("username","desc").get({
success: res => {
console.log(res);
}
});
},
1.6分页 skip limit
//测试limit skit (分页 skit是(n-1)*pageNum limit= pageNum)
testCollectionLimit: function () {
//数据库获取
const db = wx.cloud.database();
db.collection("users").skip(1).limit(1).get({
success: res => {
console.log(res);
}
});
},
1.7 filed使用(只返回需要的字段)
//测试 field
testCollectionField: function () {
//数据库获取
const db = wx.cloud.database();
db.collection("users").field({
_openid:true,
gender:true,
username:true,
}).get({
success: res => {
console.log(res);
}
});
},
2.条件查询 db.command
2.1 eq 相等写法 neq
testCmdEq: function() {
console.log("========")
const db = wx.cloud.database();
const _ = db.command;
db.collection("users").where({
gender: _.eq(1),
username: _.eq("wangyu"),
}).get({
success: res => {
console.log(res);
}
});
},
2.2 in和nin
//测试 in nin
testCmdIn: function () {
console.log("========")
const db = wx.cloud.database();
const _ = db.command;
db.collection("users").where({
gender: _.in([0,1]),
}).get({
success: res => {
console.log(res);
}
});
},
2.3 and和or
2.3.1 同一个字段范围里面的and
testCmdAnd1: function() {
console.log("========")
const db = wx.cloud.database();
const _ = db.command;
db.collection("users").where({
gender: _.gte(0).and(_.lt(2)),
// gender: _.and(_.gte(0),_.lt(1)),
username: "wangyu",
}).get({
success: res => {
console.log(res);
}
});
},
2.3.2 多个字段的写法 上面等价写法
testCmdAnd2: function() {
console.log("========")
const db = wx.cloud.database();
const _ = db.command;
db.collection("users").where(
_.and([{
gender: _.gte(0).and(_.lt(2)),
},
{
username: "wangyu",
},
])
).get({
success: res => {
console.log(res);
}
});
},
2.3.3 同一个字段范围里面的or
testCmdAnd3: function () {
console.log("========")
const db = wx.cloud.database();
const _ = db.command;
db.collection("users").where({
gender: _.gte(1).or(_.lt(0)),
// gender: _.or(_.gte(1),_.lt(0)),
}).get({
success: res => {
console.log(res);
}
});
},
2.3.4 多个字段范围里面的or
testCmdAnd: function() {
console.log("========")
const db = wx.cloud.database();
const _ = db.command;
db.collection("users").where(
_.or([{
gender: _.lte(0),
},
{
username: "wangyu",
},
])
).get({
success: res => {
console.log(res);
}
});
},
2.4 其他
2.4.1 commad .set
区别:doc upate 只更新一条记录
testDocUpdate: function() {
const db = wx.cloud.database();
db.collection('users').doc('1acf1de95e45fb7e0f607edd48d00667').update({
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
username: 'jack1'
},
success: function(res) {
console.log("update", res)
}
})
},
//测试 command set
testCmdSet: function () {
const db = wx.cloud.database();
const _ = db.command;
// 以下方法更新 style 为 { color: 'red', size: 'large' }
db.collection('users').doc('d68532785e45f87f0f5d81831aa33fbe').update({
data: {
style: _.set({
color: 'red',
size: 'large'
})
},
success:res=>{
console.log("testCmdSet success",res);
},
});
},
2.4.2 command remove 删除莫一条记录的 默认属性
//测试 command remove
testCmdRemove: function () {
const db = wx.cloud.database();
const _ = db.command;
// 以下方法更新 style 为 { color: 'red', size: 'large' }
db.collection('users').doc('d68532785e45f87f0f5d81831aa33fbe').update({
data: {
style: _.remove(),
},
success: res => {
console.log("testCmdSet success", res);
},
});
},
2.4.3 command inc 自增 mul自乘
多个用户同时写,对数据库来说都是将字段自增,不会有后来者覆写前者的情况
//测试 command inc 自增 mul乘以
testCmdInc: function () {
const db = wx.cloud.database();
const _ = db.command;
// 以下方法更新 style 为 { color: 'red', size: 'large' }
db.collection('users').doc('d68532785e45f87f0f5d81831aa33fbe').update({
data: {
progress: _.inc(5),
// progress: _.mul(5),
},
success: res => {
console.log("testCmdInc success", res);
},
});
},
2.4.4 command push pop(尾部) unshift shift(头部)
文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.push.html
//command 数组操作 push pop(尾部) unshift shift(头部)
testCmdPush: function() {
const db = wx.cloud.database();
const _ = db.command;
// 以下方法更新 style 为 { color: 'red', size: 'large' }
db.collection('users').doc('d68532785e45f87f0f5d81831aa33fbe').update({
data: {
// tags: _.push(['d', 'e', 'f']),
// tags: _.pop(),
// tags: _.shift(),
tags: _.unshift(['a']),
},
success: res => {
console.log("testCmdInc success", res);
},
});
},
二.doc
collection.doc
获取集合中指定记录的引用。方法接受一个 id 参数,指定需引用的记录的 _id。
1.1获取一条记录
//测试Doc获取
testDocGet: function() {
const db = wx.cloud.database();
//只是获取一个引用而已
var userDoc = db.collection("users").doc("1acf1de95e45fb7e0f607edd48d00667")
console.log(userDoc)
//doc get
userDoc.get({
success:res =>{
console.log("doc get",res)
}
})
},
1.2 update是 更新一条记录(有就替换,没有就新建字段)
//测试 Doc update
testDocUpdate: function() {
const db = wx.cloud.database();
db.collection('users').doc('1acf1de95e45fb7e0f607edd48d00667').update({
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
username: 'jack1'
},
success: function(res) {
console.log("update", res)
}
})
},
1.3 set是 直接替换一条记录(原来的字段都不用了) 如果id不存在会会创建一条新的
//测试 Doc set
testDocSet: function () {
const db = wx.cloud.database();
db.collection('users').doc('74b140b45e45f8ee0f5cfbec60ba553f').set({
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
password: '123456'
},
success: function (res) {
console.log(“set", res)
}
})
},
1.4 remove删除一条记录
//测试 Doc remove
testDocRemove: function () {
const db = wx.cloud.database();
db.collection('users').doc('74b140b45e45f8ee0f5cfbec60ba553f').remove({
success: res => {
console.log("remove", res)
},
fail: res => {
console.log("remove fail", res)
},
})
},
第二部分 云存储相关(图片和文件)
文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.uploadFile.html
1.上传图片
//上传图片
testUploadFile:function(){
console.log("============= testUploadFile")
//1.选择本地图片
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success(res) {
// tempFilePath可以作为img标签的src属性显示图片
// const tempFilePaths = res.tempFilePaths
// console.log("============= tempFilePaths", tempFilePaths)
wx.showLoading({
title: '上传中',
})
//2.上传图片
const filePath = res.tempFilePaths[0];
const cloudPath = 'my-image' + filePath.match(/\.[^.]+?$/)[0];
wx.cloud.uploadFile({
cloudPath: cloudPath,
filePath: filePath, // 文件路径
success: res => {
// get resource ID
console.log(res.fileID)
},
fail: err => {
// handle error
},
complete: () => {
wx.hideLoading()
}
})
}
})
},
2.获取上传的图片 【删除 deleteFile】
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.getTempFileURL.html
//获取上传的图片
testGetTmpFileImage: function() {
console.log("======testGetTmpFileImage")
wx.cloud.getTempFileURL({
fileList: ['cloud://dev-demo-0p094.6465-dev-demo-0p094-1257630646/my-image.gif', 'cloud://dev-demo-0p094.6465-dev-demo-0p094-1257630646/my-image.png'],
success: res => {
// get temp file URL
console.log(res.fileList)
},
fail: err => {
// handle error
}
})
},
3.保存云空间的图片到本地
//保存云空间的图片到本地
testSaveTmpFileImage: function() {
console.log("========testSaveTmpFileImage")
//1.下载图片
wx.cloud.downloadFile({
fileID: 'cloud://dev-demo-0p094.6465-dev-demo-0p094-1257630646/my-image.png',
success: res => {
// get temp file path
console.log(res.tempFilePath)
//2.保存图片到本地
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: result => {
wx.showToast({
title: '已保存到相册',
icon: 'success',
duration: 2000
});
}
});
},
fail: err => {
// handle error
}
})
},
第三部分 云函数
1.云函数创建,云函数上传,云函数云端调式
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async(event, context) => {
const wxContext = cloud.getWXContext()
console.log("event.a=", event.a)
console.log("event.b=", event.b)
var sum = event.a + event.b;
return {
sum: sum,
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
2.小程序端调用云函数 【小程序可以调用云函数来操作数据库,删除不是自己创建的数据】
文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/functions/Cloud.callFunction.html
//调用云函数sum
callSumFunc: function() {
wx.cloud.callFunction({
// 要调用的云函数名称
name: 'sum',
// 传递给云函数的参数
data: {
a: 1,
b: 2,
},
success: res => {
// output: res.result === 3
console.log("res=",res)
},
fail: err => {
// handle error
},
complete: () => {
// ...
}
})
},
3.云函数操作数据库
一般小程序只能删除自己创建的数据
解决:通过添加云函数解决(云函数根据用户角色删除数据)
//调用delUser云函数
callDelUserFunc: function () {
wx.cloud.callFunction({
// 要调用的云函数名称
name: 'delUser',
// 传递给云函数的参数
data: {
userid: "bde06bf0-12eb-4246-9618-2aa18f8c0158",
},
success: res => {
// output: res.result === 3
console.log("res=", res)
},
fail: err => {
// handle error
console.log("fail=", res)
},
complete: () => {
// ...
}
})
},
4.云开发新增实时数据推送能力
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/realtime.html
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。