我有一个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
对象(这不允许我调查时间戳)
最佳答案
这个用例与我回答的类似here 。
如果您还需要能够跟踪标记的时间戳,只需稍微更改您的模型,以便在 Post 中存储 Flag 对象的数组。然后,您可以向查询添加约束,以仅获取没有 Flag 对象的帖子: query.whereKeyDoesNotExist("flags")
从技术上讲,我可以通过添加云代码 afterSave()
来解决这个问题Flag 对象的函数,通过将指向新创建的 Flag 对象的指针添加到 flags
来更新 Post 对象。数组列。
评论后编辑:
OP 已澄清,这只是尚未被他感兴趣的当前用户标记的帖子。由于查询效率是您想要优化的,因此我将通过复制数据来处理这个问题。保留 flags 数组列并为 flaggedby 添加另一个数组列。 afterSave()
然后将添加一个指向 Flag 对象的指针和一个指向 User 对象的指针。
请记住,这要求您在用户“取消标记”帖子时也更新两列...
要查找当前用户尚未标记的帖子,请对 flaggedby 数组进行查询,如下所示:
[query whereKey:@"flaggedby" notEqualTo:[PFUser currentUser]];
这将返回当前用户未包含在 flaaggedby 数组列中的所有帖子
关于javascript - 如何查询没有被指向的对象? (例如,尚未标记的帖子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597331/