2016-06-15 6 views
1

これはおそらくアドバイスを探す場合です。しかし、私は達成したいものの例としてサンプルコードを提供します。私は最初のバックエンドシステムを構築しようとしており、私は設計上の問題にぶち当たっています。平均スタックを使用してバックエンド設計にどのようにアプローチすればよいですか?

私のMongoDBデータベースは、プロファイル、チーム、下書き、およびユーザーの4つの主要な部分で構成されています。プロファイル(IDを使用してすべてを取得する主なデータ)スキーマには、TeamsおよびDrafts IDで配列を保持するプロパティがあります。アイデアは、プロファイルが提供されたときにIDを使用して、すべてのプロパティに関連するデータを設定するということです。マングースを使用してプロファイルスキーマの

例:マングース使用チームプロフィールスキーマの

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var UserProfileSchema = new Schema({ 
     Name : String, 
     Email : String, 
     Admin : Boolean, 
     Status : Number, 
     UserID : String, 
     PrivateProfile: Boolean, 
     Drafts: [String], //This array holds the draft IDs 
     Teams:[String] //Holds the team profiles IDs 
    }); 

module.exports = mongoose.model('UserProfile', UserProfileSchema); 

例:すべてのチームを見つけるためにルートの

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var TeamProfileSchema = new Schema({ 
     Name : String, 
     CaptainID : String, 
     CaptainName : String, 
     Members : [String], //Array of user IDs 
     DateCreated : Boolean, 
     Reputation : Number 
    }); 


module.exports = mongoose.model('TeamProfile', TeamProfileSchema); 

例では、ユーザーがのキャプテンであるプロファイルそのチームに関連付けられているすべてのメンバーを取得します。

router.route('/teams/captain/:user_id') 
.get(function (req, res) { 
TeamProfile.find({ 
    CaptainID : req.params.user_id 
}, function (err, teams) { 
    if (err) 
     res.send(err); 

    for (var x in teams) { 
     var membersArray = []; 
     for (var i in teams[x].Members) { 
      var ID = teams[x].Members[i]; 
      UserProfile.find({ 
       UserID : ID 
      }, function (err, profile) { 
       if (err) 
        res.send(err); 
       membersArray.push(profile); 
      }); 
     } 
     teams[x].Members = membersArray; 
     console.log(teams[x].Members); 
    } 
    res.json(teams); 
}); 
}) 

私は理解しています帽子は、ルートは動作しませんが、私はこれをプルする方法は?私は、達成したいことを説明するためだけに、よりバニラのアプローチを使用しました。どんな助けも高く評価されます。

答えて

1

正規化の非正規化との正規化の組み合わせを使用することをお勧めします。

MongoDBリレーショナルデータベースではないためです。

逆正規化は、正規化よりはるかに高速です。あなたはもはや関係を使用する必要はありません。

これを読むことができます希望はあなたに役立つかもしれません。

乾杯

+1

これは非常に役に立ちます。ありがとうございます。あなたと記事が示唆するように、私は試して組み合わせを実装します。 – Poot87

関連する問題