2017-01-05 7 views
2

У меня есть групповая коллекция, у которой есть ссылочный массив членов. Два объекта взаимосвязаны, как показано ниже. Когда я добавляю новых членов в группу, необходимо обновить поле членов объекта Group. Как это сделать с помощью оператора mongooseupdate.Как обновить ссылочный массив в 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"}); 

Благодарю вас заранее.

Обновление

Я добавил образец документа группы.

{ 
    "_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

+0

@chridam. Конечно. Я обновил вопрос. Также спасибо за быстрый ответ. –

+0

@chridam. Да, мы можем справиться с этим оператором $ push. Пожалуйста, разместите это как ответ, где я могу принять его в качестве ответа. –

ответ

2

Если вы отправляете новые члены как список объектов со следующей структурой, например

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

затем использовать $push с $each модификатора в обновлении следующим образом:

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

Спасибо, что ответили. –