uni-app unicloud-db组件的remove方法使用指定id删除时传参非doc操作而是用的dbCmd.in
uni-app unicloud-db组件的remove方法使用指定id删除时传参非doc操作而是用的dbCmd.in
操作步骤
如上
预期结果
正常传入docId
实际结果
无docId
bug描述
uni-admin项目里有一个默认代码示例是这样的:
confirmDelete(id) {
this.$refs.udb.remove(id, {
success: (res) => {
this.$refs.table.clearSelection()
}
})
}
在pc端执行的时候,network截图:
然后我在jql触发器里,beforeDelete打印到 docId为空,where={"_id":{“operator”:“in”,“operands”:[“677f684fa7c4328611c164e7”],“fieldName”:{}}}
我觉得remove传字符串id就应该使用doc方法这样才比较合理,不然触发器里判断是否为批量删除根本行不通
官方文档:
docId 是通过doc()删除时才会有,unicloud-db的remove不是doc删除。
我知道,我的描述就是觉得单删记录时应该走doc操作,如果你们不好改那就算了吧,我自己通过判断where条件也能完成这个需求
在 uni-app
中使用 unicloud-db
组件进行数据库操作时,如果希望使用 remove
方法并指定 id
删除记录,但传参方式不是直接传递文档对象(doc
),而是使用 dbCmd.in
,这实际上是一个较为特殊的场景,因为 dbCmd.in
通常用于处理集合中满足特定条件的多个文档,而不仅仅是单个文档的 id
。
不过,假设你有特定的需求或场景需要使用 dbCmd.in
来模拟或实现某种功能,下面是一个如何使用 dbCmd.in
结合 remove
方法的代码示例。但请注意,这通常不是最佳实践,因为对于单个文档的删除,直接传递 doc
或使用 _id
进行删除更为直观和高效。
// 假设你有一个集合名为 'myCollection'
const db = uniCloud.database();
const collection = db.collection('myCollection');
// 要删除的文档ID
const idToDelete = 'your-document-id';
// 使用 dbCmd.in 来模拟删除单个文档(不推荐,仅作为示例)
collection
.where('_id').in([idToDelete]) // 使用 _id 字段和 dbCmd.in
.remove()
.then(res => {
console.log('删除成功', res.result);
// res.result 是一个对象,包含 deleted: number,表示删除的文档数量
})
.catch(err => {
console.error('删除失败', err);
});
在上述代码中,我们通过 where('_id').in([idToDelete])
来指定要删除的文档 id
,虽然这种方式能够工作,但它并不符合直觉,且效率较低,特别是当集合中包含大量文档时。
更推荐的做法是直接使用 _id
字段进行删除:
// 直接使用 _id 字段删除文档
collection
.doc(idToDelete) // 直接通过 doc 方法指定 _id
.remove()
.then(res => {
console.log('删除成功', res.result);
})
.catch(err => {
console.error('删除失败', err);
});
这种方式更为简洁和高效,特别是当你明确知道要删除的文档 id
时。
总之,虽然可以通过 dbCmd.in
来实现删除操作,但这并不是推荐的做法。在大多数情况下,应该直接使用 _id
字段和 doc
方法来进行单个文档的删除操作。