1

私はNoSQLのやり方に非常に慣れていないので、これについて完全に間違っていると思っているだけならすみません(私はそう感じます)。

私のアプリケーションにはユーザーと組織があり、ユーザーはメンバーまたは所有者の役割を持つ組織を持ち、それらの組織に属している必要があります。

現在、私のユーザーのスキーマには次のものがあります。

組織: [{ タイプ: Schema.Types.ObjectId, ref: '組織' }]

私の組織のスキーマには次のものがあります。

メンバー: [{ タイプ: Schema.Types.ObjectId, ref: 'ユーザー' }]

しかし、これにメンバーまたは所有者の役割も付けたいと思います。

これは、実際の参照に次のように入れる必要がありますか?

メンバー: [{ タイプ: Schema.Types.ObjectId, ref: 'ユーザー', ロール: 文字列 }]

または、ロールをスキーマの他の場所に配置する必要がありますか? これを処理する適切な方法は何ですか、またはこれをより適切にスキーマ化する別の方法はありますか?

このためのスキーマを適切に設定したら、この役割を持つ参照を使用していくつかのユーザー/組織を作成する方法の例が役立つでしょう。

4

1 に答える 1

3

そこにあるものを少し変更するだけでこれを行うことができます。同じ方法でアプリにメッセージを保存します(テキストと送信者)。

できることは次のとおりです。

members: [{
    role: { 
      type: String
    },
    user: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'User'
    }
  }],

次に、1 つまたは複数のメンバーを組織に追加する場合 (既に組織とユーザーを別々に作成していると仮定します):

function addNewMember(org_id, user_id, role) {   
    var member = {role: role, user: user_id};
    Organization.findByIdAndUpdate(org_id, {"$push": {"members":member}}, function(err,org) {
               ...
             });)  
// you can use the $each clause to add a whole array of members at the same time too
// like so:
// {"$push": {"members": 
//              {
//              "$each": [memberarray]
//              }}}

}

そして、メンバーを含む組織を見つけたい場合は、次のようにします。

    Organization.findById(org_id) 
        .populate('members.user')
        .exec(callbackfunction);

各メンバーの組織 -> メンバー関係をメンバー -> 組織としても複製する必要がある場合は、慎重に検討してください。これが本当に重要な場合は、ユーザーを組織に正常に追加した後、コールバックで 2 番目のクエリを実行して、上記のようにユーザーの組織フィールドを更新できます。

于 2014-09-20T02:27:20.323 に答える