带有计数的领域子查询

时间:2016-06-03 17:53:05

标签: ios objective-c realm

人和团体。每组有多少人? SQL数据库的简单方案。请帮助在Realm中获取此内容。

我有

@interface PersonObject : RLMObject

@property int idx;

@property NSString *firstName;
@property NSString *lastName;

@property RLMArray <PersonGroupId *> <PersonGroupId> *connectedGroupIds;

群组

@interface GroupObject : RLMObject

@property int idx;
@property NSString *name;

我需要获得所有群组的列表,其中每个群组的总人数。目前它是通过循环遍历组完成的,而且速度非常慢:

for (GroupObject *group in groups)
    {
        RLMResults *result = [PersonObject objectsWhere:@"ANY connectedGroupIds.idx == %d",group.idx];
        group.numberOfMembers = result.count;
    }

是否可以只使用一个查询/子查询来获取它而不通过组循环?

1 个答案:

答案 0 :(得分:0)

听起来你正试图模拟一个人可以属于多个群组的场景,一个群组可以包含多个人。要做到这一点,我建议一个看起来像这样的模型:

@interface PersonObject : RLMObject

@property NSString *firstName;
@property NSString *lastName;

@property RLMArray<GroupObject> *connectedGroups;

@end


@interface GroupObject : RLMObject

@property NSString *name;

@property RLMLinkingObjects<PersonObject> *members;

@end


@implementation GroupObject

+ (NSDictionary *)linkingObjectsProperties
{
    return @{ @"members": [RLMPropertyDescriptor descriptorWithClass:PersonObject.class propertyName:@"connectedGroups"] };
}

@end

这利用了Realm内置的关系支持,而不是试图使用每个对象的标识符来模仿它们。此模型允许您使用group.members.count确定组中的成员数。