Tengo una colección de grupo, que tiene una matriz de referencia de miembros. Dos objetos están interconectados como sigue. Cuando agrego nuevos miembros al grupo, el campo de miembros del objeto Grupo debe actualizarse. ¿Cómo puedo hacer esto con un operador de update de mongoose ?
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"});Gracias de antemano.
Actualizar
Agregué un documento de muestra de grupo.
{ "_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 }Si está enviando los nuevos miembros como una lista de objetos con la siguiente estructura, por ejemplo
membersListToAdd = [ { "user_id": "58171d75e72bf516f92dcd4e", "name": "foo" }, { "user_id": "5821807516325e127f59438e", "name": "bar" } ] luego use $push con $each modificador en una actualización de la siguiente manera:
var query = { name: 'My Group' }, options = {}, callback = function (err, result) { console.log(result); }; Group.update(query, { $push: { members: { $each: membersListToAdd } } }, options, callback)Estás haciendo esto mal,
no es necesario tener enlaces en ambas colecciones y no es necesario anidar modelos
prueba esto en su lugar
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' }] }));