uni-app unicloud-db组件的remove方法使用指定id删除时传参非doc操作而是用的dbCmd.in

发布于 1周前 作者 sinazl 来自 Uni-App

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截图:图1

然后我在jql触发器里,beforeDelete打印到 docId为空,where={"_id":{“operator”:“in”,“operands”:[“677f684fa7c4328611c164e7”],“fieldName”:{}}}

我觉得remove传字符串id就应该使用doc方法这样才比较合理,不然触发器里判断是否为批量删除根本行不通

官方文档:图2


3 回复

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 方法来进行单个文档的删除操作。

回到顶部