set会覆盖之前的记录存在危险
set如果只修改一条数据的一个字段,他会把要修改的字段进行修改,但是其他的字段全部清空,如下图,原本有好几个字段,使用了set之后,只剩用set'修改的name了
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;
};
remove 触发请求
删除记录 可以通过id进行删除记录,也可以通过where方法,对其他字段进行批量或单项的删除,
先创建一个云函数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()
};
第一条数据chenchen已经被删除了
通过where进行删除 现在的数据表除了id是唯一标识外,其他字段的数据是有可能重复的,所以,设计数据库时,可以把其他项设为唯一。就是在索引名称里填字段名,选唯一,这样,这个字段就可以起到唯一标识符的作用了,就可以通过这个字段来进行操作数据库,如果是删除其他没有设为唯一标识符的字段,可能有重复的数据会被删掉
如果不通过条件判断,在unicloud中,直接用remove会删掉整个数据库,微信小程序在这一块会有限制用于保护数据