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

Posted

技术标签:

【中文标题】从数据库“quick.db”中删除所有以相同键开头的数据【英文标题】:delete all the data that start with the same key from the database "quick.db" 【发布时间】:2021-04-08 06:22:41 【问题描述】:

大家好,我正在尝试删除所有以 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

谁能帮帮我

【问题讨论】:

【参考方案1】:

如果您查看Quick.db Documentation,您将看到.delete() 接受一个键,但.all() 为您提供了一个值数组,它们没有提及返回类型,在查看source code 后发现如果您获得具有 ID 和数据作为属性的对象,您可以映射 id 并为每个对象调用 delete

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
, [])

【讨论】:

以上是关于从数据库“quick.db”中删除所有以相同键开头的数据的主要内容,如果未能解决你的问题,请参考以下文章

从文件中删除所有以 # 开头的行

HTML5 Localstorage & jQuery:删除以某个单词开头的本地存储键

从 quick.db 排序数据

我如何循环遍历数据库中的每个公会成员(quick.db)

Discord.js 错误:它正在删除整个数组。 Quick.db 和 discord.js

FilterListView - 从列表中删除不以提供的前缀开头的项目