sql >> データベース >  >> NoSQL >> MongoDB

Mongoidstore_inはランダムな結果を生成します

    しばらく時間がかかりましたが、答えがわかりました。他の人の役に立つことを願って、投稿することにしました。

    Mongoidは、「単一テーブル継承」と呼ばれるものを実装します。親クラスから子クラスを派生させるとすぐに、子は「type」属性を追加して親コレクションに格納されます。 「store_in」を使用すると、ドキュメントを保存するコレクションをmongodbに明示的に指示します。子クラスでstore_inを定義すると、mongoidは指定されたコレクション内のすべて(親を含む)を保存します。子ごとに専用のstore_in割り当てを使用すると、モンゴイドが台無しになると思います。ただし、その結果、ドキュメントは指定されたコレクションのいずれかにランダムに保存されます。

    これは、共通機能のミックスインとしてモジュールを使用してRubyで解決できます。これは、このドキュメント

    しかし、結局これをしないことにしました!私がこれを欲した理由は、より良いパフォーマンスを得ることを望んで、私のコレクションを小さく保つためです。何人かの(10gen)専門家と話した後、より良いアプローチは、すべての子要素に単一の親オブジェクトコレクションを使用することだと思います。 mongodbのパフォーマンスに影響はないはずですが、ソリューションははるかに柔軟になります。実際、これにより、mongodbのスキーマレス設計がはるかに有効になります。

    したがって、コードは再び次のようになります。

    class BaseClass
      include Mongoid::Document
    
      ... shared functionality
    
    end
    
    class ChildClass1 < BaseClass
      ...individual functionality...
    end  
    
    class ChildClass2 < BaseClass
      ...individual functionality...
    end
    



    1. ARMテンプレート出力を介してRedisprimaryKeyを返す方法は?

    2. MongoDbcsharpドライバーを使用してタイプが変更された場合のフィールドの逆シリアル化

    3. GoogleCloudPlatform-mongodbに接続できません

    4. MongoDB-ネストされた配列のフィールド値に基づいて配列オブジェクトのフィールドを更新します