数据库

在这里插入图片描述

云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。
一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。

关系型数据库和 JSON 数据库对比

在这里插入图片描述

数据类型

  • String:字符串
  • Number:数字
  • Object:对象
  • Array:数组
  • Bool:布尔值
  • Date:时间
  • Geo:多种地理位置类型
    • Point:点
    • LineString:线段
    • Polygon :多边形
    • MultiPoint:点集合
    • MultiLineString:线段集合
    • MultiPolygon:多边形集合
  • Null 相当于一个占位符,表示一个字段存在但是值为空

数据库操作

  1. 初始化(调用获取默认环境的数据库的引用)
     const db = wx.cloud.database()
    
  2. 通过数据库引用上的 collection 方法获取一个集合的引用
    const todos = db.collection('集合名')
    
  3. 在集合对象上调用 add 方法往集合中插入一条记录
    	db.collection('集合名').add({
    	  // data 字段表示需新增的 JSON 数据
    	  data: {
    	    name: "alice",
    	    age: 18
    	  }
    	})
    	.then(res => {
    	  //成功的处理
    	  console.log(res)
    	}).catch(err => {
    		//失败的处理
    	})
    
  4. 记录和集合上都有提供 get 方法用于获取单个记录或集合中多个记录的数据
    //获取单条数据
    db.collection('集合名').doc('数据id').get().then(res => {
      // res.data 包含该记录的数据
      console.log(res.data)
    })
    
    
    //获取多条记录
    db.collection('集合名').where({
      name : 'alice'
    })
    .get({
      success: function(res) {
        // res.data 是包含以上定义的两条记录的数组
        console.log(res.data)
      }
    })
    
  5. 使用 update 方法可以只更新指定的字段,其他字段不受影响。
     db.collection('集合名').doc('数据id').update({
      // data 传入需要局部更新的数据
      data: {
        name : 'alice'
      },
      success: function(res) {
        console.log(res.data)
      }
    })
    
    
    //批量更新
    //在云函数,可通过 where 语句选取多条记录执行删除
    const cloud = require('wx-server-sdk')
    const db = cloud.database()
    const _ = db.command
    
    exports.main = async (event, context) => {
      try {
        return await db.collection('集合名').where({
          name : 'alice'
        }).update({
          data: {
            age:100
          },
        })
      } catch(e) {
        console.error(e)
      }
    }
    
  6. 对记录使用 remove 方法可以删除该条记录
    //删除单条记录
    db.collection('集合名').doc('数据id').remove({
      success: function(res) {
        console.log(res.data)
      }
    })
    
    
    //多条删除
    //在云函数,可通过 where 语句选取多条记录执行删除
    const cloud = require('wx-server-sdk')
    const db = cloud.database()
    const _ = db.command
    
    exports.main = async (event, context) => {
      try {
        return await db.collection('集合名').where({
          name : 'alice'
        }).remove()
      } catch(e) {
        console.error(e)
      }
    }
    

联表查询

与同个数据库下的一个指定的集合做 left outer join(左外连接)。对该阶段的每一个输入记录,lookup 会在该记录中增加一个数组字段,该数组是被联表中满足匹配条件的记录列表。

lookup({
from: <要连接的集合名>,
localField: <输入记录的要进行相等匹配的字段>,
foreignField: <被连接集合的要进行相等匹配的字段>,
as: <输出的数组字段名>
})

参数说明
在这里插入图片描述
具体操作

		const db = cloud.database()
		db.collection('集合名').aggregate()
		  .lookup({
		    from: '关联的集合名',
		    localField: '关联字段',
		    foreignField: '关联的集合名关联字段',
		    as: '输出结果字段名',
		  }).end()
		  .then(res => console.log(res))
		  .catch(err => console.error(err))

事务处理

采用的是快照隔离,不支持批量操作

云函数中, 流程自定义控制的 startTransaction 接口


  try {
    const transaction = await db.startTransaction()
    // ...
    await transaction.collection('集合名').doc('数据id').update({
      data: {
        name : 'alice'
      }
    })
    // 提交事务
    await transaction.commit()
  } catch (e) {
    console.error(`transaction error`)
  }
}
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐