unicloud13-set与update的区别

138 阅读2分钟

set会覆盖之前的记录存在危险

set如果只修改一条数据的一个字段,他会把要修改的字段进行修改,但是其他的字段全部清空,如下图,原本有好几个字段,使用了set之后,只剩用set'修改的name了

image.png update可以进行批量修改,可以只更新传入的字段,set不行,set是有数据就覆盖,没数据就创建新数据

从中间添加数据

'use strict';
const db=uniCloud.database();
const dbCmd = db.command;
exports.main = async (event, context) => {
	let res = await db.collection("users").where({
    _id:"63d8b35e819ce8248e864ddf"
  }).update({
    // 在like这个字段中新增两个字符串,从位置1的地方开始,0后面开始
    like:dbCmd.push({
      each:["aaa","bbb"],
      position:1
    })
  })
  return res;
};

image.png

remove 触发请求

删除记录 可以通过id进行删除记录,也可以通过where方法,对其他字段进行批量或单项的删除,

image.png

先创建一个云函数cloudDemoRemove

前端代码: 写一个按钮,通过按钮的点击事件方法调用云函数,并接收云函数的返回值

<template>
	<view class="home">
    <view class="out">
      <view class="row" v-for="item in listArr" :key="item._id">
        姓名:{{item.name}}--年龄:{{item.age}}
      </view>
      
      <button @click="onUpdate">点击修改</button>
      <button type="warn" @click="onRemove">点击删除一条数据</button>
    </view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
        listArr:[]
			}
		},
		onLoad() {
      // 调用数据库查询方法
      this.getData()
		},
		methods: {
      // 获取数据库中的方法
      getData(){
        uniCloud.callFunction({
          name:"cloudDemoGet",
          data:{
            keyword:"小明"
          }
        }).then(res=>{
          console.log(res);
          this.listArr=res.result.data
        })
      },
      // 修改数据库内容
      onUpdate(){
        uniCloud.callFunction({
          name:"cloudDemoUpdate"
        }).then(res=>{
          console.log(res);
        })
      },
      //删除数据
      onRemove(){
        uniCloud.callFunction({
          name:"cloudDemoRemove"
        }).then(res=>{
          console.log(res);
        })
      }
		}
	}
</script>

<style lang="scss">
.out {
  padding: 30rpx;
  .row {
    border-bottom: 1px solid #ccc;
    padding: 20rpx 0;
  }
}
</style>

云函数代码:

'use strict';
// 实例化数据库对象
const db=uniCloud.database();
exports.main = async (event, context) => {
  // 连接数据表并通过指定ID删除对应数据--整条数据删除
	return await db.collection("users").doc("63d63c04819ce8248ecf8c8b").remove()
};

image.png

第一条数据chenchen已经被删除了 image.png

通过where进行删除 现在的数据表除了id是唯一标识外,其他字段的数据是有可能重复的,所以,设计数据库时,可以把其他项设为唯一。就是在索引名称里填字段名,选唯一,这样,这个字段就可以起到唯一标识符的作用了,就可以通过这个字段来进行操作数据库,如果是删除其他没有设为唯一标识符的字段,可能有重复的数据会被删掉

如果不通过条件判断,在unicloud中,直接用remove会删掉整个数据库,微信小程序在这一块会有限制用于保护数据

image.png