删除:
在列表页面,如果想删除一个item,原本要做很多事:
- 弹出删除确认框
- 弹出loading
- 调用clientDB的js api删除云端数据
- 接收云端删除结果,如果成功则关闭loading
- 进一步删除列表的data中对应的item,自动刷新页面
为减少重复开发,unicloud-db组件提供了remove方法,在列表渲染时绑定好index,直接调用remove方法即可一行代码完成上述5步。
首先在列表生成的时候给删除按钮绑定好id:
<unicloud-db ref="udb" :collection="collectionName" v-slot:default="{data,pagination,loading,error}"><uni-table :loading="loading" :emptyText="error.message || '没有更多数据'" border stripe ><uni-tr><uni-th>用户名</uni-th><uni-th>操作</uni-th></uni-tr><uni-tr v-for="(item,index) in data" :key="index"><uni-th>{{item.username}}</uni-th><uni-td><view><button @click="confirmDelete(item._id)" type="warn">删除</button></view></uni-td></uni-tr></uni-table></unicloud-db>
然后confirmDelete方法里面只有一行代码:
confirmDelete(id) {this.$refs.udb.remove(id)}
注意:clientDB组件的remove方法的参数只支持传入数据库的_id进行删除,不支持其他where条件删除。
参数传入的_id支持单个,也支持多个,即可以批量删除。多个id的格式是:
this.$refs.udb.remove(["5f921826cf447a000151b16d", "5f9dee1ff10d2400016f01a4"])
完整实例,remove可选参数。
var ids = ["5f921826cf447a000151b16d", "5f9dee1ff10d2400016f01a4"]this.$refs.udb.remove(ids, {action: '', // 删除前后的动作confirmTitle: '提示', // 确认框标题confirmContent: '是否删除该数据', // 确认框内容success: (res) => { // 删除成功后的回调const { code, message } = res},fail: (err) => { // 删除失败后的回调const { message } = err},complete: () => { // 完成后的回调}})
也可以通过clientDB API的方式直接调用添加函数,而不再需要用ref引用来获得对象。
代码块简写为cdb:
methods:{submit(){}}
注意:
- 如果列表分页采取分页组件,即page-data值为replace,每页有固定数量,那么clientDB组件的remove方法删除数据后,会重新请求当前页面数据。
- 如果列表采取滚动加载方式,即page-data值为add,滚动加载下一页数据,那么clientDB组件的remove方法删除数据后,不会重新请求数据,而是从已有数据移除已删除项。(组件版本1.1.0+支持)
服务端云函数中的删除
删除文档
方式1 通过指定文档ID删除
不知道为什么这种方法无法正常删除,推荐用方式2中的指令匹配删除
方式2 条件查找文档然后直接批量删除 ```javascript // 删除字段a的值大于2的文档 const dbCmd = db.command let res = await collection.where({ a: dbCmd.gt(2) }).remove()// 清理全部数据let res = await collection.get()res.data.map(async(document) => {return await collection.doc(document.id).remove();});
// 清理全部数据 const dbCmd = db.command let res = await collection.where({ _id: dbCmd.exists(true) //删除所有存在_id属性的字段 }).remove()
响应参数| **字段** | **类型** | **必填** | **说明** || --- | --- | --- | --- || deleted | Number | 否 | 删除的记录数量 |示例:判断删除成功或失败,打印删除的记录数量```javascriptconst db = uniCloud.database();db.collection("table1").doc("5f79fdb337d16d0001899566").remove().then((res) => {console.log("删除成功,删除条数为: ",res.deleted);}).catch((err) => {console.log( err.message )}).finally(() => {})
