如何使用MongoId创建多级文档

时间:2012-06-18 08:02:37

标签: ruby-on-rails mongodb

我正在开发Ruby on Rails(3.2.6)应用程序,并使用MongoId(3.0.0)与MongoDB数据库进行交互。我只是想知道如何保存包含多个级别而不仅仅是一个级别的嵌入式JSON对象。

我有一个旧的MongoDB数据库,具有这种和类似的结构,所以我需要使用相同的结构保存新文档。

这是来自文档,用于添加一个级别的文档:

Person.create(
  first_name: "Heinrich",
  last_name: "Heine"
)

如何添加具有此结构的对象:

{
    "basic": {
        "file_id": {
            "file": "cf1952761a806c56c9bee60665418f02c"
        },
        "share": false,
        "status": "created"
    },
    "data": {
        "id": "4fd942dder5f5e88837300026e",
        "name": "roberta",
        "comment": "This is a comment"
    }
}

1 个答案:

答案 0 :(得分:2)

最简单的方法是为basicdata创建类,并将它们嵌入到顶级文档中。

嵌入式文档类在Mongoid中的定义方式与在embedded_in调用以及顶级文档中匹配embeds_oneembeds_many的其他文档相同。

另一种选择是简单地定义一个Hash字段,但这显然可能有任何结构。

Class Person
    include Mongoid::Document

    field :data, :type => Hash

    ...
end

:data将接受任何哈希,即使使用嵌套哈希也是如此。