无法更新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) {} );