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

如何从WatermelonDB的fetch()查询结果中获取._raw内的真实数据?

优化查询结果获取方式,避免手动提取_raw

你当前查询返回的是数据库框架生成的模型实例对象,这些实例包含框架内部管理用的元数据(如__changes、isEditing),业务数据被封装在_raw属性中。虽然用map能提取数据,但确实不是最优解,以下是更专业的处理方案:

1. 使用框架原生API直接获取原始数据

这类ORM框架(比如WatermelonDB)通常提供了跳过模型包装、直接返回原始数据的查询方法,比如fetchRaw():

const rows = await db.active.collections
    .get('messages')
    .query(
            Q.where('status', messagesStatus.ERROR)
     ).fetchRaw()

调用fetchRaw()后,返回的结果就是你需要的纯业务数据数组,无需再手动处理_raw属性,这是最符合框架设计逻辑的方案。

2. 封装模型方法,提升可读性与可维护性

如果你的框架没有提供fetchRaw()这类方法,可以给模型类添加一个获取原始数据的实例方法,替代直接访问_raw:

// 定义Message模型时添加方法
class MessageModel extends Model {
  // ... 模型的其他配置(如table名、字段定义)

  // 封装获取原始数据的方法
  get rawData() {
    return this._raw;
  }
}

// 查询后使用
const rawRows = rows.map(row => row.rawData);

这种方式比直接取_raw更具可读性,后续如果框架内部属性名变更,只需修改模型方法即可,无需改动所有调用处。

3. 利用框架的序列化能力

多数ORM会给模型实例提供序列化方法(比如toJSON()),默认会返回过滤掉内部元数据的业务数据:

const rawRows = rows.map(row => row.toJSON());

这是框架官方推荐的对外暴露业务数据的方式,比直接访问私有属性_raw更安全、更符合规范。

内容的提问来源于stack exchange,提问作者Prieyudha Akadita S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:20:32