Я уверен, что это просто очень простая концепция 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
Вау! Моя база данных только что потеряла кучу вещей?
Что здесь происходит? Это ожидаемое поведение?