从数据库“quick.db”中删除所有以相同键开头的数据

问题描述

大家好,我正在尝试删除所有以 modapp_${message.guild.id} 开头的数据

我尝试使用:

let money = db.all().filter(a => a.ID.startsWith(`modapp_${message.guild.id}`))
db.delete(money)

但它给了我这个错误 sqlite3 can only bind numbers,strings,bigints,buffers,and null

谁能帮帮我

解决方法

如果你查看 Quick.db Documentation 你会看到 .delete() 接受一个键但是 .all() 给你一个值数组,他们没有提到返回类型,在查看了source code 事实证明,您获得了以 ID 和数据为属性的对象,您可以映射 ID 并为每个对象调用删除

let money = db.all()
  .map(entry => entry.ID)
  .filter(id => id.startsWith(`modapp_${message.guild.id}`))

money.forEach(db.delete)

或者,您可以使用 Array#reduce 仅循环一次,提及此作为替代方案,否则您将循环 3 次

let money = db.all().reduce((acc,val) => {
  if (val.ID.startsWith(`modapp_${message.guild.id}`)) {
    acc.push(val.ID)
  }

  return acc
},[])