Parse platform 用于推送到属于特定角色的所有用户的查询
这个问题与Parse.com有关 我想构建一个推送查询,将通知从云代码推送到属于“版主”角色的所有用户 我尝试了下面的代码,但推送失败,因为“用户”是一个关系,而不是对象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
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
,就可以完成这一任务
综上所述,您应该非常仔细地检查单个查询的附加约束,并确保它值得额外的麻烦。这是我不想要的。错过了最后一句话。请参见编辑。这是一个不寻常的限制。。。可以实现,但与只运行第二个查询相比成本较高。你能解释一下你为什么想要这个吗?如果我们能理解更大的目标,也许有办法解决。