2016-06-01 7 views
0

私が取り組んでいるプロジェクトでMongoDBを使用しています。私のテーブルは、次のように設計されています。MongoDB集計とテーブルモデリング

user = { 
    id: ObjectID, 
    friends: [ObjectID (user), ...] 
    teams: [{ 
    "team_name": "example_team", 
    "id": ObjectID, 
    "users": [ 
     ObjectID (user), 
     ObjectID (user), 
     .... 
    ] 
    }] 
} 

私はチームを見つけて、特定のユーザーに友達で、チームのすべてのメンバーを返すことができているMongoDBのクエリを実行しようとしています。これはMongoDB集約を使用するのに適したユースケースですか?私はそれの特徴を見てきましたが、それを私のモデルに合わせる方法を理解できませんでした。それと並行して、私はどのようにユーザーの内部にチームを格納しているのかを確認します。ユーザーのチームを保持する別のテーブルを持つ方がよいでしょうか?

ありがとうございました。

+0

私の印象は、集計を使用する必要があり、複雑なクエリになるということです。これはあなたが示唆したようにそのデータを分離するための引数になりますが、そうすることでクエリがより面倒になるでしょう。チームとユーザーは多対多の関係であるため、最高のデザインはコレクションを分離することです。参照:https://docs.mongodb.com/manual/core/data-model-design/ – Tiramisu

答えて

1

チームごとに別々のコレクションを持つことは正確ですが、データ使用パターンがユーザー情報を取得するたびにチームデータ/情報を取得する場合、パフォーマンスに影響する可能性があります(2番目のクエリが必要ですチームの詳細を取得する)。

友人はユーザーにはプライベートなので、チームは一種の共有可能なオブジェクトです。

この場合の集約フレームワークは、チーム内のすべてのユーザーIDに基づいてデータをスキャンして結合し、それを返す優れたソリューションです。 このデータはあまり深くないので(レベルチームは1つです)、変換は簡単で効率的です。

コメント歓迎!