如何更新mongoid文档的架构并删除" stale"旧架构中的字段?

时间:2015-08-27 21:55:42

标签: ruby mongodb mongoid schema

我试图弄清楚如何使用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;字段。

0 个答案:

没有答案