我试图弄清楚如何使用Mongoid,我可以更新我的文档架构,并且不再自动清除架构中的任何旧字段。
例如,让我说我有类似的东西:
class Car
include Mongoid::Document
field :kind, type: String
field :model, type: String
end
我做了:
Car.create(kind: "Toyota", model: "Sequoia")
在DB中它看起来像:
{
"_id": {
"$oid": "55df818533aa6848de000000"
},
"kind": "Toyota",
"model": "Sequoia"
}
然后我在一个单独的会话中重新定义汽车如下:
class Car
include Mongoid::Document
field :make, type: String
field :model, type: String
end
我抓住了现有的记录(目前只有一个记录):
car = Car.first
并更新它:
car.make = "Honda"
car.model = "Accord"
car.save
如果我再去看看我有的数据库:
{
"_id": {
"$oid": "55df818533aa6848de000000"
},
"kind": "Toyota",
"model": "Accord",
"make": "Honda"
}
换句话说,即使我的"架构"变成了#34; make"和"模型",属性" kind"留在文件里。
有没有办法告诉Mongoid"保存并清除未引用的字段/对象"?
我不确定这是什么,否则我可能会找到答案......有关删除孤立字段定义的事情吗?
我欢迎任何帮助。谢谢!
注意:Mongoid"隐藏"这是因为当我根据Car的最新定义访问文档时,它只返回相关字段:
Car.last.inspect
"#<Car _id: 55df818533aa6848de000000, make: \"Honda\", model: \"Accord\">"
然而,&#34; kind&#34;字段仍在DB中。事实上,如果我再次重新定义我的架构,就像:
class Car
include Mongoid::Document
field :kind, type: String
field :make, type: String
field :model, type: String
end
然后去获取数据记录,它仍然有&#34; kind&#34;字段的数据:
Car.last.inspect
"#<Car _id: 55df818533aa6848de000000, kind: \"Toyota\", make: \"Honda\", model: \"Accord\">"
我猜这是故意的,但在我的情况下,我宁愿选择明确清除&#34;陈旧&#34;或者&#34;孤儿&#34;字段。