如何查询尚未被指向的对象? (例如,尚未被标记的帖子)

时间:2015-11-08 18:16:12

标签: javascript parse-platform

我有一个Posts个对象。用户通过创建具有指向攻击性Flags对象的指针的Posts对象来标记帖子。如何查询尚未标记的Posts?我试过了:

var postQuery = new Parse.Query("Posts");
var flagQuery = new Parse.Query("Flags");
postQuery.doesNotMatchKeyInQuery("objectId", "post", flagQuery);

但不会省略标记的帖子(objectId是字符串,post是指针?)。

其他想法(以及我拒绝它们的原因):

  • 单独执行flagQuery,创建标记的帖子ID数组,并使用postQuery.notContainedIn("objectId", flagArray);(这需要额外的请求)
  • Posts对象上增加已标记的计数器(这不会让我调查哪些用户标记了什么)
  • Posts对象中存储一组旗手(用户),而不是拥有Flags对象(这不会让我调查时间戳)

1 个答案:

答案 0 :(得分:1)

此用例与我回答的here类似。

如果您还需要能够跟踪标记的时间戳,只需稍微更改模型,以便在Post中存储Flag对象数组。然后,您可以向查询添加约束,以仅获取没有Flag对象的帖子:query.whereKeyDoesNotExist("flags")

从技术上讲,我会通过为Flag对象添加一个云代码afterSave()函数来解决这个问题,该函数通过向flags数组列添加指向新创建的Flag对象的指针来更新Post对象。

评论后修改: OP已经明确指出,只有帖子没有被他感兴趣的当前用户标记。由于查询效率是你想要优化的,我会通过复制数据来处理这个问题。保留数组列的标志,并为 flaggedby 添加另一个数组列。然后afterSave()将添加指向Flag对象的指针和指向User对象的指针。

请记住,如果用户“取消标记”帖子,则要求您同时更新这两列...

要查找当前用户未标记的帖子,请查询 flaggedby 数组,如下所示:

[query whereKey:@"flaggedby" notEqualTo:[PFUser currentUser]];

这将返回当前用户未包含在 flaggedby 数组列中的所有帖子