无法更新mongo文档中的embedded项目(无法更新)

我有一个像这样的mongoose模式,我可以更新和查询就好:

// Subscriber Schema var Subscriber = new Schema({ 'user': ObjectId, 'level': { type: String, enum: [ 'sub', 'poster', 'blocked' ] }, //blocked means users has opted out of list 'dateAdded': { type: Date, default: Date.now } }); // Group Schema var Group = new Schema({ 'groupEmail': { type: String, lowercase: true, validate: [validatePresenceOf, 'an email is required'], index: { unique: true } }, 'groupOwner': ObjectId, 'groupName': String, 'twitterFeed': String, 'subscribers': [Subscriber], 'createdAt': { type: Date, default: Date.now } }); 

我正在尝试更新组文档中的订阅者,并更改其级别,然后保存更改。 我能够很好地find组:

 Group.findOne({ _id: req.params.groupId }, function(err, g) 

一旦我有组,我想find一个订户,所以我可以更新它。 如果我尝试:

 g.subscribers.update({ 'user': req.params.userId }, { level: newStatus }); 

我得到:

 TypeError: Object { user: 4fc53a71163006ed0f000002, level: 'sub', _id: 4fd8fa225904a5451c000006, dateAdded: Wed, 13 Jun 2012 20:37:54 GMT },{ user: 4fda25ac00cd9bdc4f000004, level: 'sub', _id: 4fda270bbce9f8d058000005, dateAdded: Thu, 14 Jun 2012 18:01:47 GMT },{ user: 4fda2a634499dfd16e00000d, level: 'sub', _id: 4fda2a634499dfd16e00000e, dateAdded: Thu, 14 Jun 2012 18:16:03 GMT } has no method 'update' 

我尝试过更新,查找等各种排列,但总是得到“没有办法”的错误。 我究竟做错了什么? 有没有不同的方式我应该更新Subscriber.level?

谢谢!!

@eltoro基本上是正确的,数组没有update方法,并且使用Group.update的build议是一个很好的build议,但更新语法缺less$ in subscribers.$.level

 Group.update( {_id: req.params.groupId, 'subscribers.user': req.params.userId}, { 'subscribers.$.level': newStatus }, function(err, result) {} ); 

我想你会得到这个错误,因为你在实例上调用更新,而不是模型。

也许尝试这样的事情:

 Group.update( {_id: req.params.groupId, subscribers.user: req.params.userId}, { subscribers.level: newStatus }, function(err, result) {} );