【问题标题】:Possible Parse bug in matchesKeyInQuerymatchKeyInQuery 中可能的解析错误
【发布时间】:2016-03-22 08:20:57
【问题描述】:

如果我 Parse 数据库中的帖子被点赞,我想通过云代码向作者发送推送。
为了能够向特定用户发送推送,所有安装都存储当前用户的objectId。为了找到喜欢的帖子的作者,我使用查询

var userWhosePostWasLikedQuery = new Parse.Query(Parse.Installation);
userWhosePostWasLikedQuery.equalTo(kClassInstallationKeyCurrentUserId, userWhosePostWasLiked.id);

这很好用:向作者发送一次推送。

现在我只想在作者启用此类推送的情况下发送此推送。因此,每个用户都存储了一个推送设置数组,其中包含不同推送的启用标志。
我现在对所有启用了此类推送的用户使用另一个查询:

const User = Parse.Object.extend(kClassUser);
var pushEnabledUserQuery = new Parse.Query(User);
pushEnabledUserQuery.equalTo(kClassUserKeyPushSettings, kPushNotificationTypePostLiked);

此查询正确返回启用了此类推送的所有用户。

最后,我想通过对启用推送的用户的查询来限制作者作为当前用户的安装查询。这是通过以下方式完成的:

var userWhosePostWasLikedQuery = new Parse.Query(Parse.Installation);
userWhosePostWasLikedQuery.equalTo(kClassInstallationKeyCurrentUserId, userWhosePostWasLiked.id);
userWhosePostWasLikedQuery.matchesKeyInQuery(kClassInstallationKeyCurrentUserId, kPFObjectId, pushEnabledUserQuery);  

由于没有第 3 行的旧查询返回 1 个用户,带有附加约束 (matchesKeyInQuery) 的新查询应该返回相同的用户,因为作者启用了推送。
它返回 2 个用户,即作者和另一个喜欢该帖子的用户。

据我了解,这看起来像是 Parse 错误,因为查询的所有约束都是 ANDed。
有什么想法,也许是一种解决方法?

【问题讨论】:

    标签: parse-platform constraints parse-cloud-code pfquery


    【解决方案1】:

    您的 var "kPFObjectId" 应更改为 "user"。 默认解析安装带有名为“user”而不是“kPFObjectId”的指针。 我可以告诉你,我使用相同的方法(“matchesKeyInQuery”)并且效果很好:

    Parse.Cloud.define("sendPushForChat", function(request, response) {
        var userId = request.params.userId;
        var groupId = request.params.groupId;
    
        var query = new Parse.Query('RecentActivity');
        query.equalTo('groupId',groupId);
        query.include('user');
        query.notEqualTo('user',  {__type: "Pointer", className: "_User", objectId: userId});
    
        var queryInstallation = new Parse.Query(Parse.Installation);
        queryInstallation.matchesKeyInQuery('user', 'user', query);
    
        var message = request.params.messageContent;
        Parse.Push.send({
            where: queryInstallation,
            data: {
                alert: message,
                badge: "Increment",
                title: "מה נשמע?"
            }
        }, {
            success: function() {
                console.log("Push for chat was successful");
                response.success('Push for chat was successful');
            },
            error: function(error) {
                console.error(error);
                response.error('error');
            },
            useMasterKey:true,
        });
    })
    

    【讨论】:

    • 感谢您的回答。但是,我的问题是我的pushEnabledUserQuery 返回仅1 个用户,而matchesKeyInQuery(…, …, pushEnabledUserQuery) 返回2 个用户。据我了解,这是不可能的,因为matchesKeyInQuery 应该过滤第一个查询的结果,而不是返回更多结果。
    • 没问题,正如我所说,这个函数 (matchesKeyInQuery) 对我很有效,所以您的代码中可能还有其他错误。如果它适用于许多其他 ppl,我认为此功能不会有错误。但你知道一切都可能发生:)
    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多