Parse.com 一对多问题。是否可以在一个查询中获取所有内容?

Parse.com one-to-many issue. Is it possible to fetch everything in one query?

在我的应用程序中,我正在使用 Parse.com 服务。我有名为 ItemPrice 的实体。一个项目可能有多个价格,这意味着每个价格对象都有对其项目的引用。项目根本不知道价格。 我的目标是在一次查询中获取商品及其价格。如果我有一个具有一系列价格的项目,那将非常简单。我会做以下事情:

PFQuery* itemsQuery = [PFQuery queryWithClassName:@"Item"];
[itemsQuery includeKey:@"Prices"];

但我没有数组。所以我将被迫有两个连续的查询。第一个将获取项目,一旦项目准备就绪,我将创建第二个:

PFQuery* query = [PFQuery queryWithClassName:@"Price"];
[query whereKey:@"Item" equalTo:fetchedItem];

但我不喜欢。我想在一次查询中获取商品及其价格。甚至可以在不使用数组的情况下做到这一点吗?

您正在考虑更多的 RDBMS 而很少考虑 NoSQL。解析数据库是一个 NoSQL 存储,因此您不具有与使用关系数据库相同的特征。

这种情况下的解决方案是——在这种情况下,在 NoSQL 中比连接表更常见——将您的价格存储在 Item 实体内部的数组结构中并查询它。

这是来自 Parse.com 论坛的相关 link:

https://www.parse.com/questions/how-to-join-several-tables-with-one-to-many-relationship

您的 'Price' Class 项目需要一个 'pointer' 列。在您的例子中,指针是 PFObjects - 'Item' 对象。然后你可以在 'Price' Class 上进行查询以获取价格对象数组 (NSArray *objects):

PFQuery *query = [PFQuery queryWithClassName:@"Price"];
[query includeKey:@"item"];
[query whereKey:@"item" equalTo:selectedItem]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
   if (objects) {
      // do something with price objects here
   }
}];