Node.js 无法更新mongo文档中的嵌入项(无方法更新)

Node.js 无法更新mongo文档中的嵌入项(无方法更新),node.js,mongodb,mongoose,Node.js,Mongodb,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, defa

我有一个猫鼬模式,看起来像这样,我可以很好地更新和查询:

// 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 }
});
我正在尝试更新组文档中的订阅服务器,并更改其级别,然后保存更改。我可以通过以下方式找到团队:

Group.findOne({ _id: req.params.groupId }, function(err, g)
一旦我有了组,我想找到一个订户,这样我就可以更新它。如果我尝试:

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'
我尝试了各种各样的更新、查找等排列,但总是出现“hasnoamethod”错误。我做错了什么?是否有其他方法更新Subscriber.level


谢谢

我认为您会出现错误,因为您正在对实例而不是模型调用update

也许可以试试这样:

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

@eltoro基本上是正确的,数组没有
update
方法,建议使用
Group.update
是一个很好的方法,但是更新语法缺少
订阅服务器中的
$
。$.level

Group.update(
    {_id: req.params.groupId, 'subscribers.user': req.params.userId}, 
    { 'subscribers.$.level': newStatus }, function(err, result) {}
);
没有快乐。当我尝试上述操作时,在“unexpected.”“with subscribers.user和subscribers.level”上出现编译错误,如果我将它们都放在引号中,我会得到:
MongoError:无法使用字符串字段名[level]追加到数组中。