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

多対多のモデリング:Mongoid/MongoDBを使用したスルー

    優れたMongodbスキーマのモデリングは、データへのアクセス方法によって異なります。説明したケースでは、memberships.user_idキーにインデックスを付けます。これは問題ないようです。ただし、閲覧者、編集者、管理者を追加すると、ドキュメントのサイズは大きくなります。また、スキーマにより、次のようなクエリを作成することが困難になります。

    user_id xxxがエディターであるプロジェクトのクエリ:

    繰り返しますが、このようなプロジェクトをクエリする必要はないかもしれないので、スキーマは問題なく見えます。ただし、user_id ANDロールでプロジェクトをクエリする必要がある場合は、「project_membership」コレクションを作成することをお勧めします:

    db.project_memberships.insert(
      { 
        "project_id" : ObjectId("4d730fcfcedc351d67000032"),
        "editors" : [
          ObjectId("4d730fcfcedc351d67000002"),
          ObjectId("4d730fcfcedc351d67000004")
        ],
        "viewers" : [
          ObjectId("4d730fcfcedc351d67000002"),
          ObjectId("4d730fcfcedc351d67000004"),
          ObjectId("4d730fcfcedc351d67000001"),
          ObjectId("4d730fcfcedc351d67000005")
        ],
        "administrator" : [
          ObjectId("4d730fcfcedc351d67000011"),
          ObjectId("4d730fcfcedc351d67000012")
        ]
      }
    )
    
    db.project_memberships.ensureIndex({"editors": 1})
    db.project_memberships.ensureIndex({"viewers": 1})
    db.project_memberships.ensureIndex({"administrator": 1})
    

    またはさらに簡単に...プロジェクトスキーマにインデックスを追加します:

    db.projects.ensureIndex({"memberships.role": 1})
    



    1. MongoDBのJavaORMのオーバーヘッド

    2. 現在の値に基づいてMongoDBの値を更新します

    3. mongodbでの並べ替えのためにプロパティの順序はどのように維持されますか?

    4. 500万を超えるレコードのパフォーマンスをクエリするMongoDB