如何将 Legacy Realm JSON 数据迁移到 MongoDB Realm (Atlas) - 关系问题

问题描述

我正在尝试从 Legacy Realm 迁移到 MongoDB Realm,但在迁移具有关系的数据时遇到问题。

示例架构:

{
  name: 'Location',primaryKey: '_id',properties: {
    _id: 'string',_partition: 'string?',Name: 'string',WorkTime: 'WorkTime[]',},}

{
  name: 'WorkTime',Day: 'string?',Open: 'string?',Closed: 'string?',}

我应该以什么格式将json推送到MongoDB Atlas,以便与相关数据链接

我尝试从 WorkTime 集合中添加 ID(带和不带分区字符串),遵循 https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/

示例 JSON:

{  
   "_id":"adaaade7-2b4f-5342-92a1-f00857a61253"
   "_partition":"TestPartition","Name":"Test","WorkTime":[
      {
         "_partition":"TestPartition","_id":"1229ac83-f390-00e3-14a7-ffa9f8eb36e4"
      },{
         "_partition":"TestPartition","_id":"9af60ff2-064b-3f09-6621-e7f949b003be"
      },"_id":"04c33a8c-5e59-45ab-fbf8-e70446324475"
      },],}

当我尝试从领域 (realm.objects('Location')) 获取数据时,我什么也没得到。仅当 WorkTime 为空时才会显示位置。

我还尝试传递整个 WorkTime 对象,而不是 Id,但随后它创建了完整对象的副本。

解决方法

我想通了,引用的对象必须是Id字符串,就像示例中那样。 https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/

所以,如果你有

{  
   "_id":"adaaade7-2b4f-5342-92a1-f00857a61253"
   "_partition":"TestPartition","Test": {"_id":"9af60ff2-064b-3f09-6621-e7f949b003be","_partition":"TestPartition"},"WorkTime":[
      {
         "_partition":"TestPartition","_id":"1229ac83-f390-00e3-14a7-ffa9f8eb36e4"
      },],}

应该转换为

{  
   "_id":"adaaade7-2b4f-5342-92a1-f00857a61253"
   "_partition":"TestPartition","Test": "9af60ff2-064b-3f09-6621-e7f949b003be","WorkTime":[
     "1229ac83-f390-00e3-14a7-ffa9f8eb36e4"
   ],}

只留下 Id 作为字符串。

我递归遍历对象,删除嵌套对象的非 id 属性,用 _id 替换 Id 并添加分区键。之后,您必须用字符串 {"_id":"9af60ff2-064b-3f09-6621-e7f949b003be"} -> 9af60ff2-064b-3f09-6621-e7f949b003be 替换嵌套对象。