我确信这只是一些非常基本的MongoDB概念我无法理解,但这让我感到疯狂。
我的Rails 3.1应用程序中有2个非常简单的Mongoid模型
class Box
include Mongoid::Document
field :name, :type => String
embeds_many :things
end
class Thing
include Mongoid::Document
field :name, :type => String
embedded_in :box
end
我创建了2个盒子
Box.create :name => "Big"
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">
Box.create :name => "Small"
=> #<Box _id: 4e5e5c251c3a2b2efc00009e, _type: nil, name: "Small">
我注意到的第一个奇怪的事情就是这个
Box.all.count
=> 2
Box.all.collect &:name
=> ["Big", "Small"]
Box.all.first
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">
Box.all.last
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">
first
和last
是一样的吗?什么......?
当我向盒子添加东西时,下一个奇怪的事情发生了
my_box = Box.find "4e5e5c051c3a2b2efc00009d"
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">
my_box.things.create :name => "Stuff"
=> #<Thing _id: 4e5e5ee11c3a2b2efc00009f, _type: nil, name: "Stuff">
my_box.things.all.count
=> 1
# ... add a bunch of other things
my_box.things.all.count
=> 5
my_box.things.create :name => "Stuff"
=> #<Thing _id: 4e5e5eeb1c3a2b2efc0000a4, _type: nil, name: "Stuff">
my_box.things.all.count
=> 2
哇!我的数据库丢失了很多东西吗?
这里发生了什么?这是预期的行为吗?
答案 0 :(得分:0)
您可以尝试按照
class Box
include Mongoid::Document
field :name, :type => String
references_many :things
end
class Thing
include Mongoid::Document
field :name, :type => String
referenced_in :box
end
答案 1 :(得分:0)
感谢大家的建议。
使用Mongoid和Rails 3.1显然是一个丑陋的副作用。就像Rails 3.0的魅力一样。
对于记录:不要尝试使用带有Rails 3.1的Mongoid 2.2.0。