概念
1.小程序云开发,让前端程序员拥有后端的能力
2.包含:云函数(nodejs)、云数据库(mogodb)、云存储
3.前端写好函数->上传到云服务器 实现自定义云部署
4.前端去调用云函数,间接通过云函数对数据库的操作
5.前端->全栈
创建云开发项目

创建云数据库
1.创建集合

2.添加记录

使用云开发
1.云id 来自云开发->概览->环境id

2.app.js里

3.云函数index.js

4.选择环境

5.上传部署

6.增量上传

云函数定义

在页面中调用云函数
wx.cloud.callFunction({name,data})

用云函数操作云数据
1.初始化
var db = cloud.database();
2.获取
var data = await db.collection("feedback").get()
3.添加
var data = await db.collection("feedback").add(data:{添加数据})
补充
操作云数据的一些相关方法
1.插入数据
db.collection('todos').add({
  // data 字段表示需新增的 JSON 数据
  data: {
    // _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
    description: "learn cloud database",
    due: new Date("2018-09-01"),
    tags: [
      "cloud",
      "database"
    ],
    // 为待办事项添加一个地理位置(113°E,23°N)
    location: new db.Geo.Point(113, 23),
    done: false
  },
  success: function(res) {
    // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
    console.log(res)
  }
})
2. 查询数据
[
  {
    _id: 'todo-identifiant-aleatoire',
    _openid: 'user-open-id', // 假设用户的 openid 为 user-open-id
    description: "learn cloud database",
    due: Date("2018-09-01"),
    progress: 20,
    tags: [
      "cloud",
      "database"
    ],
    style: {
      color: 'white',
      size: 'large'
    },
    location: Point(113.33, 23.33), // 113.33°E,23.33°N
    done: false
  },
  {
    _id: 'todo-identifiant-aleatoire-2',
    _openid: 'user-open-id', // 假设用户的 openid 为 user-open-id
    description: "write a novel",
    due: Date("2018-12-25"),
    progress: 50,
    tags: [
      "writing"
    ],
    style: {
      color: 'yellow',
      size: 'normal'
    },
    location: Point(113.22, 23.22), // 113.22°E,23.22°N
    done: false
  }
  // more...
]
3.更新数据
db.collection('todos').doc('todo-identifiant-aleatoire').update({
  // data 传入需要局部更新的数据
  data: {
    // 表示将 done 字段置为 true
    done: true
  },
  success: function(res) {
    console.log(res.data)
  }
})
4.删除数据
//删除一条记录
db.collection('todos').doc('todo-identifiant-aleatoire').remove({
  success: function(res) {
    console.log(res.data)
  }
})
// 删除多条记录
// 使用了 async await 语法
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: true
    }).remove()
  } catch(e) {
    console.error(e)
  }
}
排序api
//按一个字段排序
db.collection('todos').orderBy('progress', 'asc')
  .get()
  .then(console.log)
  .catch(console.error)
//按多个字段排序
db.collection('todos')
  .orderBy('progress', 'desc')
  .orderBy('description', 'asc')
  .get()
  .then(console.log)
  .catch(console.error)
分页api
limit
db.collection('todos').limit(10)
  .get()
  .then(console.log)
  .catch(console.error)
skip
db.collection('todos').skip(10)
  .get()
  .then(console.log)
  .catch(console.error)
查询api
const _ = db.command
const result = await db.collection('todos').where({
  price: _.lt(100)
}).get()
云上传api
wx.cloud.uploadFile
示例:
const cloud = require('wx-server-sdk')
const fs = require('fs')
const path = require('path')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
  const fileStream = fs.createReadStream(path.join(__dirname, 'demo.jpg'))
  return await cloud.uploadFile({
    cloudPath: 'demo.jpg',
    fileContent: fileStream,
  })
}
可在官网 云开发->开发者资源 中找到
具体请参照官网官网:Collection]((Collection)).where(condition: Object): [Collection | 微信开放文档