Javascript 从SQL一到多解析NoSQL
我一直使用MySQL作为数据库,看到连接被NoSQL的解析API扭曲,我相信我的数据库设计存在缺陷 以下是我使用的:Javascript 从SQL一到多解析NoSQL,javascript,database-design,parse-platform,nosql,Javascript,Database Design,Parse Platform,Nosql,我一直使用MySQL作为数据库,看到连接被NoSQL的解析API扭曲,我相信我的数据库设计存在缺陷 以下是我使用的: Game --------- id userA userB currentRound RoundScore // A Game can have 0-3 RoundScore --------- id game -> Pointer field to Game user round score (还有一个默认的用户集合,其中包含解析和游戏中所有与用户相关的字段,Rou
Game
---------
id
userA
userB
currentRound
RoundScore // A Game can have 0-3 RoundScore
---------
id
game -> Pointer field to Game
user
round
score
(还有一个默认的用户集合,其中包含解析和游戏中所有与用户相关的字段,RoundScore指向用户集合。这非常有效)
看到解析API的工作原理,我发现很难进行查询:
获取所有游戏
及其(最多3次)回合分数
其中Game.userA=me
或Game.userB=me
我可以很容易地获得所有比赛,但没有他们的回合分数
。我不能两者都加入
我应该如何处理此查询或设计?
我应该将总分合并到游戏集合中吗?如果是这样,我应该如何声明新字段?我已经阅读了所有这些页面:
var RoundScoreQuery = new Parse.Query("RoundScore");
var userAQuery = new Parse.Query("Game");
userAQuery.equalTo("userA", "me");
var userBQuery = new Parse.Query("Game");
userBQuery.equalTo("userB", "me");
var gamesQuery = Parse.Query.or(userAQuery, userBQuery);
gamesQuery.find({
success: function(results) {
// results contains all games where "me" is a part of
for (var i = 0; i < results.length; i++) {
var gameId = results[i].get("id");
RoundScoreQuery.equalTo("game", gameId);
query.first({
success: function(object) {
// Successfully retrieved the object with the score
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
},
error: function(error) {
// There was an error.
}
});
var RoundScoreQuery=newparse.Query(“RoundScore”);
var userAQuery=newparse.Query(“游戏”);
equalTo(“userA”,“me”);
var userBQuery=newparse.Query(“游戏”);
userBQuery.equalTo(“userB”、“me”);
var gamesQuery=Parse.Query.or(userAQuery,userBQuery);
gameskry.find({
成功:功能(结果){
//结果包含所有“我”是其中一部分的游戏
对于(var i=0;i
我已经阅读了所有这些页面:var RoundScoreQuery = new Parse.Query("RoundScore");
var userAQuery = new Parse.Query("Game");
userAQuery.equalTo("userA", "me");
var userBQuery = new Parse.Query("Game");
userBQuery.equalTo("userB", "me");
var gamesQuery = Parse.Query.or(userAQuery, userBQuery);
gamesQuery.find({
success: function(results) {
// results contains all games where "me" is a part of
for (var i = 0; i < results.length; i++) {
var gameId = results[i].get("id");
RoundScoreQuery.equalTo("game", gameId);
query.first({
success: function(object) {
// Successfully retrieved the object with the score
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
},
error: function(error) {
// There was an error.
}
});
var RoundScoreQuery=newparse.Query(“RoundScore”);
var userAQuery=newparse.Query(“游戏”);
equalTo(“userA”,“me”);
var userBQuery=newparse.Query(“游戏”);
userBQuery.equalTo(“userB”、“me”);
var gamesQuery=Parse.Query.or(userAQuery,userBQuery);
gameskry.find({
成功:功能(结果){
//结果包含所有“我”是其中一部分的游戏
对于(var i=0;i
我已经阅读了所有这些页面:var RoundScoreQuery = new Parse.Query("RoundScore");
var userAQuery = new Parse.Query("Game");
userAQuery.equalTo("userA", "me");
var userBQuery = new Parse.Query("Game");
userBQuery.equalTo("userB", "me");
var gamesQuery = Parse.Query.or(userAQuery, userBQuery);
gamesQuery.find({
success: function(results) {
// results contains all games where "me" is a part of
for (var i = 0; i < results.length; i++) {
var gameId = results[i].get("id");
RoundScoreQuery.equalTo("game", gameId);
query.first({
success: function(object) {
// Successfully retrieved the object with the score
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
},
error: function(error) {
// There was an error.
}
});
var RoundScoreQuery=newparse.Query(“RoundScore”);
var userAQuery=newparse.Query(“游戏”);
equalTo(“userA”,“me”);
var userBQuery=newparse.Query(“游戏”);
userBQuery.equalTo(“userB”、“me”);
var gamesQuery=Parse.Query.or(userAQuery,userBQuery);
gameskry.find({
成功:功能(结果){
//结果包含所有“我”是其中一部分的游戏
对于(var i=0;i
我已经阅读了所有这些页面:var RoundScoreQuery = new Parse.Query("RoundScore");
var userAQuery = new Parse.Query("Game");
userAQuery.equalTo("userA", "me");
var userBQuery = new Parse.Query("Game");
userBQuery.equalTo("userB", "me");
var gamesQuery = Parse.Query.or(userAQuery, userBQuery);
gamesQuery.find({
success: function(results) {
// results contains all games where "me" is a part of
for (var i = 0; i < results.length; i++) {
var gameId = results[i].get("id");
RoundScoreQuery.equalTo("game", gameId);
query.first({
success: function(object) {
// Successfully retrieved the object with the score
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
},
error: function(error) {
// There was an error.
}
});
var RoundScoreQuery=newparse.Query(“RoundScore”);
var userAQuery=newparse.Query(“游戏”);
equalTo(“userA”,“me”);
var userBQuery=newparse.Query(“游戏”);
userBQuery.equalTo(“userB”、“me”);
var gamesQuery=Parse.Query.or(userAQuery,userBQuery);
gameskry.find({
成功:功能(结果){
//结果包含所有“我”是其中一部分的游戏
对于(var i=0;i
好的,这是一个很好的观点。我将创建如下()所示的游戏对象: 不再需要标志“currentRound” 因为你知道现在的回合是什么 当你看记分1,记分2和记分3 现在,您只需使用此代码即可获得所有“我”是其中一部分的游戏:
var userAQuery = new Parse.Query("Game");
userAQuery.equalTo("userA", "me");
var userBQuery = new Parse.Query("Game");
userBQuery.equalTo("userB", "me");
var gamesQuery = Parse.Query.or(userAQuery, userBQuery);
gamesQuery.find({
success: function(results) {
// results contains all games where "me" is a part of
},
error: function(error) {
// There was an error.
}
});
有关“关系数据的NoSQL设计模式”的更多信息,我推荐这篇文章:好的,这是一个很好的观点。
我将创建如下()所示的游戏对象: 不再需要标志“currentRound” 因为你知道现在的回合是什么 当你看记分1,记分2和记分3 现在,您只需使用此代码即可获得所有“我”是其中一部分的游戏:
var userAQuery = new Parse.Query("Game");
userAQuery.equalTo("userA", "me");
var userBQuery = new Parse.Query("Game");
userBQuery.equalTo("userB", "me");
var gamesQuery = Parse.Query.or(userAQuery, userBQuery);
gamesQuery.find({
success: function(results) {
// results contains all games where "me" is a part of
},
error: function(error) {
// There was an error.
}
});
有关“关系数据的NoSQL设计模式”的更多信息,我推荐这篇文章:好的,这是一个很好的观点。
我将创建如下()所示的游戏对象: 不再需要标志“currentRound” 因为你知道现在的回合是什么 当你看记分1,记分2和记分3