只是想知道我是在正确地做这件事还是有更好的方法。
我有3张桌子,游戏,用户和用户游戏。 UserGame是一个连接表,指向游戏和用户表。
以下脚本将返回用户已加入的所有游戏。
var Game = Parse.Object.extend("Game");
var UserGame = Parse.Object.extend("UserGame");
var innerQuery = new Parse.Query(Game);
var query = new Parse.Query(UserGame);
query.equalTo("user", user);
query.matchesQuery("game", innerQuery);
query.include("game");
query.find({
我现在正在尝试返回用户尚未加入的游戏。我尝试了上述查询的反向,但它不起作用。有什么想法吗?
还有比使用上面的连接表更好的解决方案,我应该只添加一个游戏指针列表到用户表吗?
答案 0 :(得分:2)
这是有用的(并且无法从网站轻松访问)
https://parse.com/docs/js/symbols/Parse.Query.html
您尝试做的事情似乎是.noContainerIn([results of the first query])
或.doesNotMatchKeyInQuery
matchesKeyInQuery
似乎更易于使用BTW
答案 1 :(得分:1)
我已经使用了一个内部有两个指针的表。我将解释我做了什么简化,并将其简化为你的情况:
1.使用您的对象Game建立一个查询,以获取此表中存在的所有游戏的数组:
var Game = Parse.Object.extend("Game");
var query = new Parse.Query(Game);
query.find({
success: function(arrayGames) {
//store this array to manage later
},
error: function(user, error) {
alert("There is not stored games");
}
});
2。获取您想要与存储在UserGame表中存储的游戏进行比较的用户,并对之前获得的数组的每个元素进行查询:
var UserGame = Parse.Object.extend("UserGame");
var query = new Parse.Query(UserGame);
var currentUser = Parse.User.current();
var currentGame;
for(var i=0; i<arrayGames.length ;i++){
currentGame=arrayGames[i];
query.equalTo("Game", currentGame);
query.notEqualTo("User", currentUser);
query.find({
success: function(foundGames) {
//you have got an array with the games not joined to this user
},
error: function(user, error) {
alert("There are not joined games ");
}
});
}
希望它有所帮助,问我是否需要更多细节;)