realm-js - 将本地领域数据复制到同步领域

2023-12-21

我在用realm-js使用 React Native 在用户的设备上存储数据,并且工作流程中的某个点我想将本地领域中的所有数据复制到同步领域(以保留在 ROS 上)。我遇到了一个问题,在我们的模式中,我们通过将引用一个对象的属性添加到另一个对象中来创建伪关系,反之亦然,这样我们就创建了循环数据结构。

这实际上在应用程序中运行良好,但现在我们尝试将数据从本地领域复制到同步领域,并且由于循环引用,它似乎崩溃了。

例如,模式看起来像这样。

class Person extends Realm.Object {}
Person.schema = {
  name: 'Person',
  properties: {
    firstName: {
      type: 'string',
      optional: true,
    },
    staffAccount: {
      type: 'StaffAccount'
    },
  },
};

class StaffAccount extends Realm.Object {}
StaffAccount.schema = {
  name: 'StaffAccount',
  properties: {
    id: {
      type: 'string',
    },
    people: {
      type: 'list',
      objectType: 'Person',
    },
  },
};

在此示例中,创建人员时,您将定义一个 StaffAccount 属性,并且该人员帐户属性将具有一个人员属性,该属性具有拥有该人员帐户的人员列表,并且在该列表中将有人员架构中的人员初始人员。

将数据从一个领域复制到另一个领域时,有什么方法可以解决这个问题吗?


看看这段代码,它需要本地.realm文件并将其复制到远程同步领域。代码可以简化,因为看起来您已经知道架构 - 此代码动态加载架构。希望能帮助到你

// Copy local realm to ROS

const Realm = require('realm');


// UPDATE THESE
const realm_server = 'localhost:9080';

const source_realm_path = './localRealm.realm'; // path on disk
const target_realm_path = '/syncRealm'; // path on server


function copyObject(obj, objSchema, targetRealm) {
    const copy = {};
    for (var key in objSchema.properties) {
        const prop = objSchema.properties[key];
        if (prop.type == 'list') {
            const propObjSchema = targetRealm.schema.find((s) => s.name == prop.objectType)
            copy[key] = obj[key].map((obj) => copyObject(obj, propObjSchema, targetRealm))
        }
        else if (prop.type == 'object') {
            const propObjSchema = targetRealm.schema.find((s) => s.name == prop.objectType)
            copy[key] = obj[key] ? copyObject(obj[key], propObjSchema, targetRealm) : obj[key];
        }
        else {
            copy[key] = obj[key];
        }
    }
    return copy;
}

function getMatchingObjectInOtherRealm(sourceObj, source_realm, target_realm, class_name) {
    const allObjects = source_realm.objects(class_name);
    const ndx = allObjects.indexOf(sourceObj);

    // Get object on same position in target realm
    return target_realm.objects(class_name)[ndx];
}

function addLinksToObject(sourceObj, targetObj, objSchema, source_realm, target_realm) {
    for (var key in objSchema.properties) {
        const prop = objSchema.properties[key];
        if (prop.hasOwnProperty('objectType')) {
            if (prop['type'] == "list") {
                var targetList = targetObj[key];
                sourceObj[key].forEach((linkedObj) => {
                    const obj = getMatchingObjectInOtherRealm(linkedObj, source_realm, target_realm, prop.objectType);
                    targetList.push(obj);
                });
            }
            else {
                // Find the position of the linked object
                const linkedObj = sourceObj[key];
                if (linkedObj === null) {
                    continue;
                }

                // Set link to object on same position in target realm
                targetObj[key] = getMatchingObjectInOtherRealm(linkedObj, source_realm, target_realm, prop.objectType);
            }
        }
    }
}

function copyRealm(user, local_realm_path, remote_realm_url) {
    // Open the local realm
    const source_realm =  new Realm({path: local_realm_path});

    // Create the new realm (with same schema as the source)
    const target_realm = new Realm({
        sync: {
            user: user,
            url:  remote_realm_url,
        },
        schema: require('./realmmodels')
    });

    // Copy all objects but ignore links for now
    target_realm.schema.forEach((objSchema) => {
        console.log("copying objects:", objSchema['name']);
        const allObjects = source_realm.objects(objSchema['name']);
        target_realm.write(() => 
          allObjects.forEach((obj) => {
              // Add this object to the target realm
                  target_realm.create(objSchema.name, copyObject(obj, objSchema, target_realm), true)
        }));
    });
}

const remote_realm_url = "realm://" + realm_server + target_realm_path;
copyRealm(Realm.Sync.User.adminUser("ADMIN_TOKEN"), 
    source_realm_path, remote_realm_url);
console.log("done");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

realm-js - 将本地领域数据复制到同步领域 的相关文章

  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 在 React Native 中调试应用程序崩溃

    我是 React Native 新手 我正在尝试安装 React Native Facebook SDK 以便我可以使用我的应用程序进行 Facebook 登录 我按照此处列出的步骤操作 https tylermcginnis com in
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • 如何在Python中获取多边形内的点列表?

    我进行了很多搜索 但找不到我的问题的任何实际答案 我有一个多边形 例如 86 52 85 52 81 53 80 52 79 48 81 49 86 53 85 51 82 54 84 54 83 49 81 52 80 50 81 48
  • cadvisor 错误报告容器内存使用情况

    cAdvisor 报告 Prometheus 使用的内存为 14GB 而 top 报告为 6 xGB 有人可以解释为什么会出现这种差异吗 container memory usage bytes 的文档说 Current memory us
  • 请求和响应处理之间的 HTTP 断开/超时

    假设以下场景 客户端正在向服务器发送 HTTP POST 请求有效并且 已被服务器处理 数据已插入数据库 Web 应用程序正在响应客户端 客户端超时 并且看不到 HTTP 响应 在这种情况下 我们会遇到以下情况 客户不知道他的数据是否有效以
  • 检测不支持的浏览器版本并显示特定的 div 和消息

    我的网站中有一个聊天机器人 它需要最新版本的浏览器才能完美工作 因此我需要向用户显示一条消息 请将您的浏览器更新到最新版本 我不想使用第三方插件 如果用户使用此 js 代码使用不受支持的浏览器版本 我如何显示 div Html div di
  • 如何将对象传递给属性构造函数

    我试图将对象传递到 Attributes 构造函数中 如下所示 PropertyValidation new NullOrEmptyValidatorScheme public string Name get private set 使用此
  • 通过java processBuilder运行cmd命令

    我正在尝试使用 ProcessBuilder 来运行命令语句 ProcessBuilder pb new ProcessBuilder cmd exe C start Process p pb start 但是 我只能打开cmd exe I
  • 2.7 CSV模块想要unicode,但不想要unicode

    csvfile open finishedFileName num csv w newline writ csv writer csvfile dialect excel firstline unicode str firstline tr
  • XCode 构建阶段:在后台运行脚本(不阻止构建)

    当我在模拟器中构建和运行 iOS 应用程序时 我希望能够在后台运行脚本 即不阻止构建过程 我试过了osascript path to script 并且还后台运行了一个单独的 shell 脚本 该脚本执行相同的操作 但两者都不起作用 构建停
  • 将公共代码添加为 git 子模块时出现问题:“索引中已存在”

    我想添加一些 git 子模块 我收到了两个共享一些通用代码的项目 共享代码只是复制到两个项目中 我为通用代码创建了一个单独的 git 存储库 并将其从项目中删除 并计划将其添加为git子模块 我使用 git submodule add 的路
  • 如何检查 preg_match() 是否为 False 而不是 True?

    我有这段代码 可确保用户名只是字母和数字 但是我的代码设置方式 我需要它来检查结果是否预匹配 https www php net manual en function preg match php is false 现在它说 如果安全则回显
  • 在组件安装过程中调试包

    我需要在 Embarcadero RAD Studio XE5 中构建为 BCB6 Borland C Builder 6 制作的旧组件 项目是 CPP 项目 组件代码包含在 PAS 文件中 该项目包含6个包 一个设计时间三个包 三个包运行
  • from Gui import * 在 python 3 中?

    我正在尝试这个 import os sys from Gui import import Image as PIL import ImageTk class ImageBrowser Gui def init self Gui init s
  • 通过PowerShell + WinRM传递双引号

    我正在用这个code https stackoverflow com a 13284313 1118239在服务器上执行远程代码 MSI 安装 通过脚本传递双引号是行不通的 我尝试了下面给出的两种变体 3 和 4 以及输出 输入 1 测试命
  • Rails 4 has_secure_password 呈现密码确认可选

    我使用 Rails 4有安全密码在我的用户模型中 技巧说如果我不设置 password confirmation 它永远不会被触发 但为什么当我运行测试时我会收到错误 密码确认不能为空如下 Failures 1 User Failure E
  • 在 Linq to SQL 中连接两个表

    也许是一个非常简单的问题 但我是 Linq to SQL 的新手 我有两张桌子 User UserId name Password Email USER TABLE Id UserId FirstName LastName 我想要一个查询
  • BufferGeometry 偏移量和索引

    我只是想知道 偏移量 和 索引 索引 到底是什么 偏移量例如中提到的https github com mrdoob Three js blob dev src core BufferGeometry js https github com
  • Python 中的桑基图

    有没有一个Python库可以生成桑基图 http en wikipedia org wiki Sankey diagram 我见过这个桑基图应用程序和库列表 http www sankey diagrams com sankey diagr
  • 从一维张量中提取前 k 个值索引

    给定 Torch 中的一维张量 torch Tensor 包含可以比较的值 比如浮点 我们如何提取顶部的索引k该张量中的值 除了暴力方法之外 我还在寻找 Torch lua 提供的一些 API 调用 它可以有效地执行此任务 截至拉取请求 4
  • 如何用动画从 UITableView 中删除行?

    我在从表视图中删除行时遇到问题 当按下行中的删除按钮时 我使用下面的代码 NSIndexPath indexPath NSIndexPath indexPathForRow control tag 100 inSection 0 resul
  • realm-js - 将本地领域数据复制到同步领域

    我在用realm js使用 React Native 在用户的设备上存储数据 并且工作流程中的某个点我想将本地领域中的所有数据复制到同步领域 以保留在 ROS 上 我遇到了一个问题 在我们的模式中 我们通过将引用一个对象的属性添加到另一个对