我有一个UserToMessage
表,其中有一个指向用户的指针thisUser
和一个指向消息的指针msg
message table
有一个指向用户creator
的指针。当我查询UserToMessage
我[includeKey:@"message"]
我还想以某种方式[includeKey:@"creator"]
......
答案 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];
如果不是这种情况,请更新您的问题以反映您的具体需求。