Realm DB向子/嵌套对象添加主键,并在迁移时填充

时间:2019-02-13 18:44:00

标签: realm realm-migration

我正在修复建模设计中的一个缺陷:

class Question extends Realm.Object {}
Question.schema = {
    name: 'Question',
    primaryKey: 'id',
    properties: {
        id: 'int',
        questionId: 'int',
        question: 'string',
        answer: 'string',
        clues: 'Clues'
    }
};

class Clues extends Realm.Object {}
Clues.schema = {
    name: 'Clues',
    primaryKey: 'id', //Added as part of new schema
    properties: {
        id: 'int', //Added as part of new schema
        clueA: 'String',
        ... //more clues
    }
};

最初,我在父Question对象上只设置了主键。这意味着每次我插入/更新Clues对象时都会有重复的元素/行。 为了解决这个问题,我正在为子Clues对象分配一个主键,该对象将具有与父对象相同的主键。这样可以确保问题的长度与线索的长度相同。

我的问题是在我的迁移代码中:

migration: (oldRealm, newRealm) => {
        // only apply this change if upgrading to schemaVersion 1
        if (oldRealm.schemaVersion < 1) {
            const oldObjects = oldRealm.objects('Question');
            const newObjects = newRealm.objects('Question');
            const newCluesObjects = newRealm.objects('Clues');
            for (let i = 0; i < oldObjects.length; i++) {
                newObjects[i].id = oldObjects[i].id;
                newCluesObjects[i].id = i + 1;
            }
        }

运行此命令时出现错误

  

错误:迁移后,主键属性'Clues.id'具有重复的值。

我本可以通过将上面的id显式设置为一个递增的整数来避免此问题,但是我必须缺少一些东西。我还尝试过使用递增的主键尝试在Question对象上设置Clues值,但无济于事。

我在想,与父母和孩子的关系可能会引起一些额外的复杂性。

在我对Realm有所了解的同时,我希望能对此提供任何指导。 谢谢。

0 个答案:

没有答案