嵌套包括Parse.com

我有一个UserToMessage表,它有一个指向用户的指针,名为thisUser ,指向消息的指针叫做msg

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

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

这会奏效。

 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 ... }]; 
 [includeKey:@"message.creator"] 

你甚至可以更深层次地做到这一点: message.creator.mother – 但不仅仅是这个。

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

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

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

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

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

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

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

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

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

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

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