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

React Native+TypeScript中MongoDB Realm嵌入对象添加至列表报错求助

解决MongoDB Realm嵌入对象创建错误

错误原因

你遇到的Error: Exception in HostFunction: Embedded objects cannot be created directly,是因为Realm中标记为embedded: true的嵌入对象不允许通过new关键字直接实例化,必须通过父文档的关联属性或Realm专用方法创建。

修复方案

有两种可行的解决方式:

方案1:直接向列表推送对象字面量

无需手动实例化yyyy对象,直接向c列表传入包含属性的对象字面量,Realm会自动将其转换为对应的嵌入对象:

const createYYYY = useCallback(
    ({y, z}: {y: string, z: string}) => {
        return realm.write(() => {
            // 直接传入对象字面量,Realm自动处理嵌入对象创建
            instanceForUpdate.c?.push({y, z});
        });
    },
    // 补充完整依赖项,比如realm、instanceForUpdate
    [realm, instanceForUpdate]
);

注:yyyy的_id字段在schema中配置了默认生成逻辑,无需手动传入,Realm会自动赋值。

方案2:使用createEmbeddedObject方法

通过Realm实例的createEmbeddedObject方法创建嵌入对象,该方法会自动将对象关联到父文档的指定属性中:

const createYYYY = useCallback(
    ({y, z}: {y: string, z: string}) => {
        return realm.write(() => {
            // 创建嵌入对象并自动添加到instanceForUpdate的c列表中
            realm.createEmbeddedObject(instanceForUpdate, 'c', {y, z});
        });
    },
    [realm, instanceForUpdate]
);

额外注意事项

  • 确保instanceForUpdate是从Realm查询返回的活跃对象,而非已被detach的对象;
  • 所有修改操作必须在realm.write()事务内部执行,你当前的代码已满足此要求;
  • 若c列表初始为undefined,Realm在首次push时会自动初始化空列表,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:52:53