我正在修复建模设计中的一个缺陷:
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有所了解的同时,我希望能对此提供任何指导。 谢谢。