微信小程序云开发

2020年2月13日

文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/security-rules.html

image.png

第一部分 数据库相关操作

image.png

一.获取数据库数据collection 相关操作

image.png

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

image.png

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 其他

image.png

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。

image.png

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

image.png

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.云函数创建,云函数上传,云函数云端调式

image.png
image.png
image.png

// 云函数入口文件
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

image.png
 //调用云函数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.云函数操作数据库

一般小程序只能删除自己创建的数据

image.png

解决:通过添加云函数解决(云函数根据用户角色删除数据)

image.png
//调用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

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

你可能感兴趣的:(微信小程序云开发)