我正在構建一個紙牌遊戲(紙牌基本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
提前
謝謝!