嵌套包括Parse.com

时间:2014-04-02 01:44:47

标签: ios objective-c parse-platform

我有一个UserToMessage表,其中有一个指向用户的指针thisUser和一个指向消息的指针msg

message table有一个指向用户creator的指针。当我查询UserToMessage[includeKey:@"message"]

我还想以某种方式[includeKey:@"creator"] ......

4 个答案:

答案 0 :(得分:5)

这样可行。

PFQuery *query = [PFQuery queryWithClassName:@"UserToMessage"];
[query includeKey:@"msg"];
[query includeKey:@"msg.creator"];

// Add constraints on query
...
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if(error) return;
    // Do action
    ...
}];

答案 1 :(得分:5)

[includeKey:@"message.creator"]

你甚至可以更深层次地做到这一点:message.creator.mother - 但不能超过这个。

答案 2 :(得分:2)

您不应该问自己如何在类似JOIN的查询中包含来自多个表的信息,而应该问自己是否设计了应用程序所需的数据库模型。

你所写的关于你的模型的内容听起来很像SQL-ish。但是,没关系,因为大多数人来到parse.com和其他NoSQL支持的服务来自SQL世界。但是,简单地将SQL数据库设计转移到Parse通常不会提供最佳解决方案。

相反,首先关注查询并确定需要返回的数据。如果您发现需要查询中返回的3个不同类的数据,那么这是模型的错误。为便携式设备开发应用程序,您需要关注查询性能和计算开销。

您应该以这样的方式设计数据库模型,即尽可能少的查询可以访问大多数(如果不是全部)数据。最好是一个。

此问题的典型解决方案围绕非规范化和最终一致性。 例如,在类似Twitter的应用程序中,如果您想要检索由您关注的人发布的帖子,那么通过首先查询某人的“关注”然后在推文表中查询所有推文来获取该帖子是不可扩展的。由那些人。它可能适用于一些关注和帖子,但如果你跟踪了100,000人,那将是不可行的。

在NoSQL场景中,当有人发布推文时,这篇文章会存储在推文表中,你可以在我的feed对象和每个feed对象的数组中的数组中存储指向该推文的指针。并且每个人都跟随推文的作者!

从SQL数据库的角度来看,我知道这看起来很奇怪(甚至疯狂),但NoSQL系统则不然。如果我后来删除了推文,则需要从可能的359.000个Feed对象中移除推文(如果我是Barack Obama)。这不会立竿见影 - 因此“最终的一致性”。

我建议您坐下来用笔和纸,根据需要检索的数据重新考虑数据库模型。

答案 3 :(得分:0)

好的,这个问题确实令人困惑。如果我理解正确,您想查询UserToMessage表并包含两个条件?如果是这样,你可以这样做:

[query whereKey:@"msg" equalTo:MSG_POINTER];
[query whereKey:@"thisUser" equalTo:PF_USER_POINTER];

如果不是这种情况,请更新您的问题以反映您的具体需求。

相关问题