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

ハウツー:ユーザーにはファンがいます

    自己参照の関連付けはどうですか:

    class User
      include Mongoid::Document
      references_many :fans, 
                      :class_name => 'User', 
                      :stored_as => :array, 
                      :inverse_of => :fan_of
    
      references_many :fan_of, 
                      :class_name => 'User', 
                      :stored_as => :array, 
                      :inverse_of => :fans
    end
    
    # let's say we have users: al, ed, sports_star, movie_star    
    sports_star.fans << al
    movie_star.fans << al
    sports_star.fans << ed
    movie_star.fans << ed
    
    movie_star.fans  # => al, ed
    al.fan_of        # => sports_star, movie_star
    

    問題は、埋め込まれたドキュメントのみを使用してリレーショナルアソシエーションを実行しようとしていることです。 Fanがある場合 User内に埋め込まれています 、Fanにのみアクセスできます 親のUserを介して 。 Fan.find(some_id)のようなことはできません Fanのコレクションがないため 記録。

    最終的に、MongoDBはこれを可能にする仮想コレクションをサポートするようになります。今のところ、リレーショナルタイプの関連付けを使用する必要があります。この場合に埋め込みドキュメントを使用する場合は、親レコードを検索するための醜く非効率的なカスタムメソッドを作成する必要があります。

    MongoDBとMongoidを使用すると、埋め込みアソシエーションとリレーショナルアソシエーションを簡単に切り替えることができることがわかりました。 SQLタイプの関係と埋め込まれた関係はどちらもその場所を持っており、一緒に使用して大きな効果を上げることができます。




    1. Twitterの記事アグリゲーター用にMongoDBスキーマを設計するにはどうすればよいですか

    2. ネストされたスキーマのマングースクエリ

    3. Mongoコレクションを削除してもディスク領域がクリアされない

    4. ScaleGridがAmazonAWSでの共有MongoDBホスティングを発表