2015-10-29 105 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