Parse platform 用于推送到属于特定角色的所有用户的查询

Parse platform 用于推送到属于特定角色的所有用户的查询,parse-platform,push-notification,Parse Platform,Push Notification,这个问题与Parse.com有关 我想构建一个推送查询,将通知从云代码推送到属于“版主”角色的所有用户 我尝试了下面的代码,但推送失败,因为“用户”是一个关系,而不是对象 var moderatorQuery = new Parse.Query(Parse.Role); moderatorQuery.equalTo("name", "Moderators"); // Push to devices belonging to these moderators v

这个问题与Parse.com有关

我想构建一个推送查询,将通知从云代码推送到属于“版主”角色的所有用户

我尝试了下面的代码,但推送失败,因为“用户”是一个关系,而不是对象

    var moderatorQuery = new Parse.Query(Parse.Role);
    moderatorQuery.equalTo("name", "Moderators");

    //  Push to devices belonging to these moderators
    var pushQuery = new Parse.Query(Parse.Installation);
    pushQuery.matchesKeyInQuery("installationOwner", "users", moderatorQuery);
另一种方法是获取主持人角色对象并使用relation.query()或调用主持人对象上的getUsers()

但我的要求是直接推送到查询,而不获取(get/find)任何对象。
如何构建这样的查询?

我认为您需要首先获取角色,然后使用它的用户关系查询作为pushQuery中要匹配的查询,如下所示:

var moderatorQuery = new Parse.Query(Parse.Role);
moderatorQuery.equalTo("name", "Moderators");
moderatorQuery.first().then(function(moderatorRole) {
    var pushQuery = new Parse.Query(Parse.Installation);
    var usersQuery = moderatorRole.relation("users").query();
    pushQuery.matchesQuery("installationOwner", usersQuery);
    // setup push, then send()
});
编辑-遗漏了问题的最后一句。简单的回答是,无法在单个查询中查询关系的“多”方面

较长的答案是,可以通过附加数据来实现。您可以将查询设置为单数查询,但代价是使其他数据保持最新

例如,您可以在
用户
上保留一个(a)isModerator bool,或者(b)更一般地,在
用户
上保留一个指针的“角色”数组(不是关系,因为这是您的根本问题),或者(c)一个单独的表,将
角色
用户
与单个指针连接在一起

所有这些想法使单一查询变得简单(a)查询
用户
其中isModerator==true,(b)查询
用户
其中角色与主持人相等,(c)查询jointable其中角色==主持人,包括用户和选择用户

这样做将负担从查询转移到保持额外数据最新。您只需在角色-用户关系的任意一端(可能是
Role
)上使用
beforeSave
,就可以完成这一任务


综上所述,您应该非常仔细地检查单个查询的附加约束,并确保它值得额外的麻烦。

这是我不想要的。错过了最后一句话。请参见编辑。这是一个不寻常的限制。。。可以实现,但与只运行第二个查询相比成本较高。你能解释一下你为什么想要这个吗?如果我们能理解更大的目标,也许有办法解决。