doesNotMatchKey:inQuery:返回与iOS解析SDK中的密钥匹配的记录

doesNotMatchKey:inQuery:返回与iOS解析SDK中的密钥匹配的记录,ios,iphone,xcode5,parse-platform,pfquery,Ios,Iphone,Xcode5,Parse Platform,Pfquery,我试图使用Parse SDK在xcode中进行一个简单的查询,在这里我向用户展示产品,但我不想向他们展示他们已经“喜欢”的产品 因此,我在分析中使用了两个表: -产品:具有objectId -Likes:包含列:Like(表示是/否)、指向产品的指针、指向用户的指针 我的任何代码是: //query will get products that the user has liked PFQuery *likeQuery = [PFQuery queryWithClassName:@"Likes"

我试图使用Parse SDK在xcode中进行一个简单的查询,在这里我向用户展示产品,但我不想向他们展示他们已经“喜欢”的产品

因此,我在分析中使用了两个表:
-产品:具有objectId
-Likes:包含列:Like(表示是/否)、指向产品的指针、指向用户的指针

我的任何代码是:

//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)
任何帮助都将不胜感激


谢谢,Tim使用Parse和其他NoSQL服务,您需要从SQL思维模式中解放出来(使用规范化等)。NoSQL“模式”关注的是查询效率,而不是存储和一致性。正如Petro所建议的,您可以将所有喜欢的内容存储在用户表中的一个数组中。然后,您可以使用一个约束查询解析,该约束声明记录不应与查询中的任何objectid匹配,如下所示:

[query whereKey:@"objectId" notContainedIn:user.productLikes];
其中productLikes是产品ID的数组

另一种解决方案是将产品like存储在不同的表中,但仍然作为一个数组(不是每个like的单独记录,带有指向产品和用户的指针,就像您使用SQL数据库所做的那样)。
在这种情况下,您可以像在问题中一样嵌套查询。

但是为什么给定的查询不起作用?whereKey:如果不是这样的话,斯诺特马奇会做什么?在他的具体例子中,我至少看到两件事。对象id的键应该是“objectId”,而不是“objectId”。其次,因为Product是指针,所以应该根据Product的对象而不是objectId字符串来度量它。