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

React Native中Realm创建workoutData时sets主键重复(_id=6)报错

React Native Realm 训练历史存储主键重复问题解决

在React Native中使用Realm存储训练历史时,调用addHistory创建workoutData对象时抛出主键重复错误:Error: Exception in HostFunction: Attempting to create an object of type 'sets' with an existing primary key value '6'。前序逻辑中已为新sets分配新ID,但仍触发该错误。

相关代码

addHistory 函数实现

export function addHistory(workout, exercise, sets, _id) {
  console.log({
    workout,
    exercise,
    sets,
    _id,
  });
  if (
    _id !== undefined &&
    workout !== undefined &&
    exercise !== undefined &&
    sets !== undefined
  ) {
    return realm.write(() => {
      return realm.create("workoutData", {
        _id: _id,
        exercise,
        workout,
        sets,
        workoutDate: new Date(Date.now()),
      });
    });
  } else {
    alert("History is incomplete");
  }
}

workoutData Schema

exports.workoutData = {
  name: "workoutData",
  primaryKey: "_id",
  properties: {
    _id: "int",
    workout: "workouts",
    exercise: "exercise",
    workoutDate: "date",
    sets: "sets[]",
  },
};

解决方案

  • 确认sets主键唯一性:在finishWorkoutHandler中打印所有sets对象的主键值,排查是否存在重复:

    setsArrCopy.forEach(set => console.log('Set ID:', set._id));
    

    若发现重复,修正ID生成逻辑,确保每次生成的主键都是Realm中不存在的新值。

  • 使用Realm更新策略:修改realm.create调用,添加第三个参数true,允许更新已存在的嵌套sets对象,避免主键冲突:

    return realm.write(() => {
      return realm.create("workoutData", {
        _id: _id,
        exercise,
        workout,
        sets,
        workoutDate: new Date(Date.now()),
      }, true); // 允许更新已存在的嵌套对象
    });
    
  • 检查sets Schema配置:若业务不需要sets的主键,可移除其主键配置;若需要主键,确保生成逻辑无重复:

    // 示例:移除sets的主键配置
    exports.sets = {
      name: "sets",
      properties: {
        weight: "float",
        reps: "int",
        // ...其他属性
      },
    };
    
  • 转换为纯JavaScript对象:若setsArrCopy中的对象是从Realm查询出的已有对象,需转换为纯JS对象后再传入:

    const plainSets = setsArrCopy.map(set => ({...set}));
    addHistory(workout, exercise, plainSets, _id);
    

内容的提问来源于stack exchange,提问作者Wahas Ali Mughal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:55:29