- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 Parse SDK 在 xcode 中执行一个简单的查询,我正在向用户展示产品,但我不想向他们展示他们已经“喜欢”的产品。
所以我在 Parse 中使用了两个表:
- 产品:有一个 objectId
- 喜欢:包含列:喜欢(说是/否)、产品指针、用户指针
我的代码是:
//query will get products that the user has liked
PFQuery *likeQuery = [PFQuery queryWithClassName:@"Likes"];
[likeQuery whereKey:@"User_Obj" equalTo:[PFUser currentUser]];
//product query will get products that are not in like query
PFQuery *prodQuery = [PFQuery queryWithClassName:@"Products"];
[prodQuery whereKey:@"objectID" doesNotMatchKey:@"Product" inQuery:likeQuery];
//restrict to 10 items
[prodQuery setLimit:10];
[prodQuery findObjectsInBackgroundWithTarget:self
selector:@selector(getCallback:error:)];
但是,当我尝试运行该用户之前喜欢的项目时,该用户正在返回。
如果我在 SQL 中这样做,我会这样写:
SELECT product FROM product WHERE product NOT IN (SELECT product FROM likes WHERE useriD = currentUser AND like = yes)
如有任何帮助,我们将不胜感激!
谢谢,提姆
最佳答案
使用 Parse 和其他 NoSQL 服务时,您需要摆脱 SQL 思维模式(使用规范化等)。 NoSQL“模式”更关注查询效率而不是存储和一致性。正如 Petro 所建议的那样,您可以将所有喜欢的内容存储在用户表中的数组中。然后,您可以使用约束条件查询 Parse,声明记录不应与查询中的任何 objectid 匹配,如下所示:
[query whereKey:@"objectId" notContainedIn:user.productLikes];
其中 productLikes 是产品 ID 数组。
另一个解决方案是将喜欢的产品存储在不同的表中,但仍然作为一个数组(不是每个喜欢的单独记录,带有指向产品和用户的指针,就像您使用 SQL 数据库所做的那样)。在这种情况下,您可以像在问题中一样嵌套查询。
关于ios - doesNotMatchKey :inQuery: return records that match key in Parse SDK for iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519862/
是否可以在一个查询中添加 2 个“doesNotMatchKey”?我尽量不显示已保存的“优惠”,也不显示已删除的优惠 // get query for all deleted offers PFQu
我在 Friendship 类中使用 fromUser 和 toUser 键对用户友谊进行排序。当我只想返回与 currentUser 没有友谊的用户时,我想使用两个 whereKey:doesNot
I have Parse classes Doctor->name,clinic,address... Patients-> name,phone... Appointments-> Doctor,p
我正在尝试使用 Parse SDK 在 xcode 中执行一个简单的查询,我正在向用户展示产品,但我不想向他们展示他们已经“喜欢”的产品。 所以我在 Parse 中使用了两个表: - 产品:有一个 o
我是一名优秀的程序员,十分优秀!