使用Mongoid创建嵌套文档

时间:2014-06-25 11:22:59

标签: mongodb model mongoid

我是Ruby和Mongoid的新手,我需要一些帮助来创建模型和建模文档。

这是文档必须具有的结构

{
  key1 : "value",
  key2 : "value",
  key3 : {
    key3.1 : "value",
    key3.2 : [array]
  },
  key4 : {
    key4.1 : "value",
    key4.2 : [
      {
       "key4.2.1" : "value",
       "key4.2.2" : "value",
       "key4.2.3" : "value",
       "key4.2.4" : [
          "key4.3.1"  : "value",
          "key4.3.1" : "value",
        ]
      },
      ...
    ]
  } 
}

我的模型看起来像这样:

class Model
  include Mongoid::Document
  field :key1, type: Integer
  field :key2, type: Integer
  field :key3, type: Hash
  field :key4, type: Hash
end

可以用MongoId制作这个结构吗? 我知道我的模型不正确且不完整。

1 个答案:

答案 0 :(得分:0)

我不确定你的意思是key4.2.4是一个有键值的数组,但是Mongoid会按照定义保存你的对象。

使用简化模型:

class Model
  include Mongoid::Document
  field :key1, type:Integer
  field :key2, type:Hash
end

你可以这样运动:

m = Model.new
m.key1 = 12
m.key2 = {a: 1, b:[{c: 2, e: [23,34]}]}
m.save

Model.first
=> #<Model _id: 53ab8ed1cac11f4c94000004, key1: 12, key2: {"a"=>1, "b"=>[{"c"=>2, "e"=>[23, 34]}]}>

因此,您可以看到所有嵌入的哈希值和数组都保存到MongoDB并由Mongoid检索而没有任何问题。

还可以使用嵌入文档(其封闭文档中包含的另一个Mongoid文档)或相关文档,其中相关文档的密钥存储在父文档中。如果您想这样做,http://mongoid.org/en/mongoid/docs/relations.html上的文档应该会有所帮助。