Database 领域:使用一对多关系查询和索引 让我们考虑人和狗的默认领域例子。

Database 领域:使用一对多关系查询和索引 让我们考虑人和狗的默认领域例子。,database,indexing,realm,Database,Indexing,Realm,名为“A”的人有3条狗,分别名为“X”、“Y”、“Z” 名为“B”的人有两条狗,分别名为“X”、“Z” 因此,代码将是 [realm beginWriteTransaction]; Person *personA = [Person createInRealm:realm withObject:@{@"name": @"A"}]; Person *personB = [Person createInRealm:realm withObject:@{@"name": @"B"}]; [Dog

名为“A”的人有3条狗,分别名为“X”、“Y”、“Z”

名为“B”的人有两条狗,分别名为“X”、“Z”

因此,代码将是

[realm beginWriteTransaction];

Person *personA = [Person createInRealm:realm withObject:@{@"name": @"A"}];
Person *personB = [Person createInRealm:realm withObject:@{@"name": @"B"}];

[Dog createInRealm:realm withObject:@{@"name": @"X", @"owners": @[personA, personB]}];
[Dog createInRealm:realm withObject:@{@"name": @"Y", @"owners": @[personA]}];
[Dog createInRealm:realm withObject:@{@"name": @"Z", @"owners": @[personA, personB]}];

[realm commitWriteTransaction];
现在,为了让所有的狗都以主人为基础,我们写

RLMArray *dogs = [Dog objectsWhere:@"ANY owners = %@", personA];

在这种情况下,我们应该如何设置索引以提高性能

我们怎样才能反向链接,这样我们就可以

RLMArray *persons = [Person objectsWhere:@"ANY dogs = %@", dogX];

这还不被支持

现在,如果您需要更频繁地在该方向上遍历,您可以更改关系的方向,并在
Person
上拥有
RLMArray
类型的属性。或者,您可以在两个方向上维护两个关系,您需要自己同步它们

我们将按问题跟踪添加对该问题的支持

RLMArray *persons = [Person objectsWhere:@"ANY dogs = %@", dogX];