我正在构建一个纸牌游戏(纸牌基本52张纸牌套装* 13等级),并且我决定在这个项目中使用MongoDB。在Mongo集合之间移动文档(通过Mongoid)
我的基本模式是: - >游戏 - >甲板 - >卡 - >播放 - >手(甲板) - >卡 - >决赛(如甲板) - >卡 - >关闭(甲板) - >卡
理想情况下,我想离开游戏的甲板转移卡插入玩家有不同的桩。
但是,执行如下操作:game.players[0].hand.cards.push(game.deck.cards.shift(1))
不起作用,相关卡不会从游戏卡组中移除(因为#delete从不会被调用),也不会将其添加到玩家手中(从我了解有限,Mongoid只会增加新对象的嵌入式集合)
所以从一个桩移动卡到另一个,我基本上要做到这一点: 游戏= Game.first 玩家=游戏。 players.first
不是地球震撼困难,但我基本上正在做一个READ,一个DESTROY和一个CREATE,来基本上模拟可能是一个非常简单的UPDATE。
有什么我失踪了吗?这是Mongoid ODM的限制吗?在收藏之间移动文件是一个巨大的禁忌?
我对这个模型的建议很开放,因为我不知道嵌入式文档是否适合这种类型的问题。
下面是相应的锅炉板
class Deck
include Mongoid::Document
field :is_deck, :type => Boolean
embedded_in :game
embedded_in :player
embeds_many :cards
end
class Card
include PlayingCards
include Mongoid::Document
embedded_in :deck
field :card_id, :type => Integer
field :idx, :type => Integer #used to maintain shuffled order since mongodb is insertion order
field :rank, :type => String
field :suit, :type => String
end
class Game
include Mongoid::Document
embeds_one :deck #deck players draw from
embeds_many :players
field :current_player, type: Integer
field :num_players, type: Integer
end
class Player
include Mongoid::Document
embedded_in :game
embeds_one :hand, class_name: "Deck"
embeds_one :closing, class_name: "Deck"
embeds_one :final, class_name: "Deck"
end
提前
谢谢!