You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dexie导出指定关联事件的trialTable数据?

解决Dexie导出指定关联trial数据及filter参数说明

一、实现选中事件关联trial数据的过滤导出

你已经引入dexie-export-import和downloadjs,只需在exportDB配置中通过filter函数精准过滤即可。假设你已拿到用户选中的事件ID数组(比如selectedEventIds = [1,3,5]),代码示例如下:

import { exportDB } from 'dexie-export-import';
import download from 'downloadjs';

// 假设你的Dexie实例为db
async function exportSelectedTrials(selectedEventIds) {
  try {
    const exportedBlob = await exportDB(db, {
      // 仅导出trial表(按需配置,不需要导出event表时加上)
      tables: ['trial'],
      filter: (value, key, table) => {
        // 只处理trial表,保留fk_event在选中ID列表中的行
        if (table.name === 'trial') {
          return selectedEventIds.includes(value.fk_event);
        }
        // 其他表若存在,返回true表示全量导出,可按需调整
        return true;
      }
    });
    // 触发下载
    download(exportedBlob, `selected-trials-${Date.now()}.json`, 'application/json');
  } catch (err) {
    console.error('导出失败:', err);
  }
}

二、exportDB中filter参数的value和key含义

  • value: 当前遍历到的完整表行数据对象,比如在trial表中,它包含fk_event、主键及其他所有字段的trial记录,你可以直接通过value.fk_event获取关联事件ID做判断。
  • key: 当前行数据的主键值,如果你的trial表主键是id,那key就是这条trial记录的id值,这个参数适合需要通过主键过滤的场景,本次需求用value.fk_event即可满足。
  • 第三个参数table是当前遍历的表对象,通过table.name可区分不同表,避免误过滤其他表数据。

三、导出后删除对应数据

导出完成后,建议先删除关联的trial数据,再删除选中的event数据(避免外键关联逻辑问题):

async function deleteSelectedData(selectedEventIds) {
  try {
    await db.transaction('rw', db.trial, db.event, async () => {
      // 删除所有关联的trial数据
      await db.trial.where('fk_event').anyOf(selectedEventIds).delete();
      // 删除选中的event数据
      await db.event.where('id').anyOf(selectedEventIds).delete();
    });
    console.log('数据删除成功');
  } catch (err) {
    console.error('删除失败:', err);
  }
}

// 调用示例:先导出再删除
exportSelectedTrials([1]).then(() => {
deleteSelectedData([1]);
});

内容的提问来源于stack exchange,提问作者Cynthia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:13:12