2017-01-05 4 views
2

私はメンバーの参照配列を持つGroup Collectionを持っています。 2つのオブジェクトは、次のように相互接続されています。グループに新しいメンバーを追加するときに、Groupオブジェクトのメンバーフィールドを更新する必要がありました。 mongooseupdateオペレータでこれを行うにはどうすればよいですか。mongooseのReference Arrayを更新するには

var MemberSchema = new Schema({ 
    name:{ 
     type:String, 
     default:null 
    }, 
    user_id:{ 
     type : Schema.ObjectId, 
     ref : 'User', 
     default : null 
    } 
}); 

var GroupSchema = new Schema({ 
    name:{ 
     type:String, 
     default:null 
    }, 
    description:{ 
     type:String, 
     default:null 
    }, 
    members:[MemberSchema], 

},{collection:"groups"}); 

ありがとうございます。

更新

私はグループのサンプル文書を追加しました。あなたはこの間違ったをやっている

{ 
    "_id" : ObjectId("586a2e694467c41218b302c3"), 
    "members" : [ 
     { 
      "_id" : ObjectId("586a2e694467c41218b302c6"), 
      "user_id" : ObjectId("58171d75e72bf516f92dcd4e"), 
      "name" : "Lakmal Kapukotuwa" 
     }, 
     { 
      "_id" : ObjectId("586a2e694467c41218b302c5"), 
      "user_id" : ObjectId("5821807516325e127f59438e"), 
      "name" : "Prasad Perera" 
     }, 
     { 
      "_id" : ObjectId("586a2e694467c41218b302c4"), 
      "user_id" : ObjectId("586263515356e908de6c899a"), 
      "name" : "Sadun Prasad" 
     } 
    ], 
    "description" : "Des 1", 
    "name" : "My group", 
    "__v" : 0 
} 
+1

はあなたが私たちの新しいメンバーの例リストを表示するには、あなたの質問に[編集]リンクを使用することができますあなたは 'members'配列に追加したいですか?私が集めたことから、メンバオブジェクトでリストを指定している場合、また配列内のオブジェクトがどのように構造化されているかによって、 '$ push'演算子を' $ each'で使う単純なケースかもしれません。あなたが追加したいメンバーの詳細。 @chridam。 – chridam

+0

確かに。私は質問を更新しました。また、迅速な対応に感謝します。 @chridam。 –

+0

はい、$ push演算子で処理できます。私は答えとしてそれを受け入れることができる答えとしてこれを投稿してください。 –

答えて

2

すると、あなたが送信している場合はこれを試して巣モデルへの必要はありませんを持ってする必要はありません次の構造を持つオブジェクトのリストとしての新しいメンバ次のように

membersListToAdd = [ 
    { 
     "user_id": "58171d75e72bf516f92dcd4e", 
     "name": "foo" 
    }, 
    { 
     "user_id": "5821807516325e127f59438e", 
     "name": "bar" 
    } 
] 

、その後のアップデートで修正$each$pushを使用します。

var query = { name: 'My Group' }, 
    options = {}, 
    callback = function (err, result) { console.log(result); }; 
Group.update(query, { $push: { members: { $each: membersListToAdd } } }, options, callback) 
0

両方のコレクションにリンクして

代わり

var Group = mongoose.model("Group", new Schema({ 
    name: { 
     type:String 
    }, 
    description: { 
     type:String 
    }, 
})); 

Group.virtual("users", { 
    ref: "User", 
    localField: "_id", 
    foreignField: "groups" 
}); 

var User = mongoose.model("User", new Schema({ 
    name:{ 
     type:String 
    }, 
    groups: [{ 
     type : Schema.ObjectId, 
     ref : 'Group' 
    }] 
})); 
+0

ありがとうございます。 –

関連する問題