如何更新mongoose中的引用数组
我有一个Group Collection,它有一个Reference的成员数组。 两个对象如下所示相互连接。 当我向该组添加新成员时,Group对象的成员字段需要更新。 我怎么能用mongoose
update
操作符来做到这一点。
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 }
如果您将新成员作为具有以下结构的对象列表发送,例如
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)
你做错了,
不需要在两个集合中都有链接,也不需要嵌套模型
试试这个
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' }] }));