解析 - 多个嵌套查询

时间:2015-01-25 06:30:50

标签: parse-platform

我正在使用 Parse 编写javascript代码。我有用户类,订阅类和收藏类。所有用户'订阅信息存储在订阅类中,其喜爱的项目信息存储在收藏夹类中,因此它们分别是一对多关系。

我想检索用户信息,每个用户的订阅次数以及它最喜欢的项目数量,并将它们存储在一个对象数组中。

我尝试的内容如下:

    query.find().then(function(objects) {
        return objects;
    }).then(function (objects) {

        objects.forEach(function(object) {

            var subscription = Parse.Object.extend('Subscription');
            var queryForSubscription = new Parse.Query(subscription);
            queryForSubscription.equalTo('subscriptionUser', object);           
            queryForSubscription.find().then(function(subscriptions) {

            var userEmail = object.get('email');
            var subscriptionCount = subscriptions.length;

            var sub = [
                userEmail,
                subscriptionCount
            ];
            userArray.push(sub);
        }
    });             

此代码适用于订阅计数,但我不太确定如何同时获取收藏计数并同时将其保存到阵列中

例如,有用户A和用户B,预期结果最终将如下所示:

    [{User A's email, A's subscription count, A's favorite count},
    {User B's email, B's subscription count, B's favorite count}]

我不太确定在哪里为Favorite类添加新查询...需要你的建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您保留用户类中保留订阅数和收藏数的列,该怎么办?因此,当用户点击" favorite"时,会发出一个请求来增加相应的列(有一个方便的parseObject.increment(" key")方法可用)。这将为每个用户的查询节省一两个电话。如果您返回了4个用户,那么4个查询与12个用户之间存在差异。

或者,您可以使用queryForSubscription.count(),而不是使用queryForSubscription.find()。这样可以节省大量请求的信息,因此您可以立即获取数字,而不必执行queryResult.length;

我为没有回答你想要的问题而道歉。我很擅长使用p​​romises语法,但这是一个嵌套下一个查询的工作:

  query.find().then(function(objects) {
    return objects;
}).then(function (objects) {

    objects.forEach(function(object) {

        var subscription = Parse.Object.extend('Subscription');
        var queryForSubscription = new Parse.Query(subscription);
        queryForSubscription.equalTo('subscriptionUser', object);           
        queryForSubscription.count().then(function(subscriptionCount) {

            var favorite = Parse.Object.extend('Favorite');
            var queryForFavorite = new Parse.Query(favorite);
            queryForFavorite.equalTo('favoriteUser', object);           
            queryForFavorite.count().then(function(favoritesCount) {

                var userEmail = object.get('email');
                //var subscriptionCount = subscriptions.length; //used count instead

                var sub = [
                userEmail,
                subscriptionCount,
                favoritesCount
                ];
                userArray.push(sub);
        }
    }
})