【发布时间】:2021-12-26 05:24:06
【问题描述】:
我的 Dexie 数据库 db.playground(ID 为 audioFiles)保存有关音频文件的信息。这些音频文件必须由添加标记的用户进行分析(因此这是一个模拟过程,而不是编程过程),一旦完成,用户单击保存按钮并且音频文件的属性“已分析”必须是设置为“真”。
Dexie 对象如下所示:
// db.playground
{
id: 'audioFiles',
audio_file_data: {
0: {id: 0, analysed: false, …}
1: {id: 1, analysed: false, …}
2: {id: 2, analysed: false, …}
}
}
“audio_file_data”中的文件数量当然会发生变化,并且 id 也会发生变化。我通过变量 this.fileData.id(这是 Vue 中的反应元素)获取此类音频文件的当前 ID。
到目前为止,我尝试更新特定音频文件的“已分析”属性已完全失败。这就是我试图做的(根据 Dexie 文档,点符号应该与嵌套元素一起使用):
const updatedItem = await db.playground.update('audioFiles', {
`audio_file_data.${this.fileData.id}.analysed`: true
})
但是由于非常错误的错误,这会变得非常松散。
然而,这种检索、操作然后重新分配完整集合的解决方案确实有效:
const dbFileEntry = await db.playground.get({ id: 'audioFiles' })
const fileCollection = dbFileEntry.audio_file_data
const file = fileCollection.find(item => {
if (item.id === this.fileData.id) {
item.analysed = true
return item
}
return false
})
const updated = await db.playground.update('audioFiles', {
'audio_file_data': fileCollection
})
不过,感觉很笨拙。有没有更短、更简洁、更专业的方法来实现?
更新
这里真正的问题是我的方法。因此,即使接受的答案不能直接解决我的问题(而且 stackoverflow 对此类问题非常严格),我还是决定将其标记为“已接受”,因为它解释了正确数据结构设置的路径. 因此,以防万一您发现自己处于这种情况,请考虑重新考虑您的设置。
【问题讨论】: