我有2个猫鼬数据库对象user
和game
,如:
User = {
game : game.Id
// each user has a game attachetd to it
}
Game = {
users : [user.Id, user.Id, ...]
// game has a list of users who have it attached to them
}
我想要执行“删除游戏”'对这两个对象进行操作。
从用户移除游戏,并从游戏阵列中删除相应的用户。
但我希望它与对方保持一致。即我最终不应该是一个附有游戏的用户,他们的阵列没有该用户,或者一个游戏阵列的用户没有附加游戏。
我无法弄清楚这样做的逻辑。
UserSchema.methods.removeGame = function(gameId) {
//remove
this.game = null;
//save
this.save(function(err, user){
if(!err) {
// then remove the user from game
// something with #1 below
// call
game.removeUser(this.id);
// but #2
}
else {
// don't remove the user from game
// also see #3
}
});
}
GameSchema.methods.removeUser = function(userId) {
//remove
this.users[userId]= null;
//save
this.save(function(err, game){
if(!err) {
// then remove the game from user
// something with #1 above
}
else {
// don't remove the game from user
// #2
// if this happens, undo removing the game from the user above
// same for above #3
}
});
}
有什么建议我应该怎么做?
承诺对我的情况有帮助吗?
首先,我应该将这种逻辑放在数据库对象中吗?
我应该重新设计我的数据库吗?