2

Ruby on Rails プロジェクトで MongoModel gem を使用していますが、問題なく動作します。モデルで定義された構造に厳密に従っていれば問題なく動作するため、基本的に MongoDB をスキーマ付きのデータベースとして使用します。しかし、ある観点から見ると、MongoDB の利点の 1 つは、それがスキーマレス データベースであることです。そして、mongo シェルでできるように、ドキュメントにランダムなフィールドを追加して、それを利用したいと思います。

どうやってするか?方法はありますか?

アップデート:

特にzero.zero.sevenとj03wからのコメントへの返信で、なぜこれを求めているのかをより明確にしようとしています。構造を考えるのが面倒くさいからではなく、Mongo の優れた機能である柔軟性を活かしたいからです。

私は以前にMS SQLと.Netで同様のことをしました。データベースの一部の構造は、テーブルではなくフォームを定義する XML ファイルで定義されていました。フォームの値は、問題の現在のアイテムのインスタンスの ID とフォームのフィールドの ID のように、垂直構造に格納され、すべての整数は「整数」テーブルに、文字列は「文字列」に格納されました。 " テーブル。これにより柔軟性が得られました: 作業を完了するために新しい情報が必要であることがわかった場合、XML を編集して新しいフィールドを追加するだけで済みます。それらはフォームに表示され、垂直 DB 構造に格納されました。しかしもちろん、それには欠点もありました。より多くのレコード、あまり明確でないデータベース、情報構造を反映していないテーブル構造などです。パフォーマンス、たぶん。

これで Mongo コンソールで遊んでいる限り、簡単です。しかし、どうすれば Rails でそれを行うことができるでしょうか? モデルではなく、別の場所で構造を定義できるソリューションを探しています。一部のフィールドはどこにでもあり、もちろんそのうちの 1 つが「サブジェクト」になる可能性があります。そのため、被験者が「旅行」と言うと、アプリケーションは「目的地」と「出発日」を尋ね、「カレンダー入力」と言うと「予定日」と「参加者」を尋ねます。したがって、構造は存在しますが、インスタンスごと、ドキュメントごとに変化します。

4

1 に答える 1

0

この質問を締め切りたいと思いますので、知識の共有と考えてください。最終的な解決策は、約 5 ~ 6 週間前に MongoModel から Mongoid に切り替えることでした。

アプリケーションで管理したい情報に対して本当にデータベースのような (「レガシー」とは言わない) アプローチをしている限り、Mongomodel は完璧なソリューションです。しかし、モデルの構造的な制約を取り除く方法がわかりませんでした。

今モンゴイドは違います。mongoid.ymlファイルでは、次のようなオプションを設定できます。

allow_dynamic_fields: true

read_attributeこれにより、 andwrite_attributeメソッドで必要だった自由が得られます。

# Raise a NoMethodError if value isn't set.
person.gender
person.gender = "Male"

# Retrieve a dynamic field safely.
person[:gender]
person.read_attribute(:gender)

# Write a dynamic field safely.
person[:gender] = "Male"
person.write_attribute(:gender, "Male")

そして出来上がり!厳密なモデルを使用して MVC を開発していますが、モデルに記載されていないフィールドを MongoDB ドキュメントに追加できます。

詳細については、mongoid のドキュメントを参照してください。

于 2013-12-25T21:44:10.010 に答える