0

我正在尝试搜索我的核心数据数据库,返回一组非常具体的记录。

我的模型看起来像这样:

firstName (NSString)
lastName (NSString)
dateOfBirth (NSDate)
updatedAt (NSDate)
weight (NSNumber)
height (NSNumber)

我想获取具有唯一firstNamelastName和值的用户列表,但只返回具有最新值dateOfBirth的每个用户的完整记录。updatedAt

所以,对于像这样的数据库:

firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100
firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 2/1/2012, weight: 120, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 2/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100

我会得到一个数组:

firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 2/1/2012, weight: 120, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 2/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100

我知道我可以跑来跑去执行一大堆不同的过滤操作,但我想知道是否有任何“捷径”可以帮助做到这一点。[fetchRequest setReturnsDistinctResults:YES]如果我对获取值不感兴趣,我可以使用,但如果我包含在要获取的属性中updatedAt,这将返回基本上所有的记录。updatedAt我担心将整个数据库加载到一个中,NSArray因为它可能非常大(> 10,000条记录)。

4

1 回答 1

0

首先,我认为你应该修改你的数据模型。名字、姓氏和出生日期不足以可靠地替换唯一 ID(在 10.000 条记录中)。

其次,因此您应该创建一个 Person 实体并使用该实体的相同记录来关联某种带有updateddate 属性的 Event。

有了这个更健壮的结构,您的查询就变得微不足道了。您只需获取所有人。如果需要,您可以为每个人选择最近的事件。

Event *latestEvent = [person.events valueForKeyPath@"@max.updated"];
于 2013-02-13T22:21:46.423 回答