2015-10-29 113 views
0

我正在parse.com的javascript云代码SDK上编写脚本。我遇到了“doesNotMatchQuery”方法的问题。 我有一个“类”称为活动,这包含一个称为电影和被叫FROMUSER包含活动的用户对象字段字段,解析Javascript云代码嵌套查询

Activity Class

我有一个称为电影类。我想要获取所有没有该用户活动的电影。

Movie Class

我使用的代码(我知道是错的,doesNotMatchQuery不正确的方法)。

Parse.Cloud.define("recommendations", function(request, response) { 
    var user = request.user; 

    var queryUserActivity = new Parse.Query("Activity"); 
    queryUserActivity.equalTo("fromUser",user); 

    var query = new Parse.Query("Movie"); 
    query.doesNotMatchQuery("movie", queryUserActivity); 
    query.find({ 
    success: function(results) { 
     response.success(results); 
    }, 
    error: function() { 
     response.error("movie lookup failed"); 
    } 
    }); 
} 

的问题是在doesNotMatchQuery,只匹配对一个字段,而我希望它来匹配从“查询”结果对象,方法“doesNotMatchKeyInQuery”接近,但仍然不提供的能力将查询结果与关键字进行匹配。

回答

1

下面的代码找到您不想通过Activity表返回的电影对象列表,并将它们排除在最终的Movie记录之外。

var _ = require('underscore'); 
Parse.Cloud.define("recommendations", function(request, response) { 

var user = request.user; 
var queryUserActivity = new Parse.Query("Activity"); 
queryUserActivity.equalTo("fromUser",user); 
queryUserActivity.select("movie"); 

queryUserActivity.find().then(function(activities) { 

    var movieObjIds = _.map(activities, function(activity) { 
     return activity.get("movie").id; 
    }); 
    var query = new Parse.Query("Movie"); 
    query.notContainedIn("objectId", movieObjIds); 
    return query.find(); 

}).then(function(results) { 
     response.success(results); 
}, function(error) { 
     response.error(error); 
}); 
}); 
+0

我试过了,但它不起作用。我猜它是因为它会是movie.objectId 我也试过这个query.doesNotMatchKeyInQuery(“objectId”,“movie.objectId”,queryUserActivity); – Reedy

+0

我以为是。我更新了我的答案,并解决了问题 –

+0

感谢Mo Nazemi,该解决方案在进行了一些编辑(语法错误)后发挥作用。 – Reedy