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

时间:2012-06-14 20:06:14

标签: node.js mongodb mongoose

我有一个看起来像这样的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 }
});

我尝试更新群组文档中的订阅者,并更改其级别,然后保存更改。我可以使用以下方式找到该组:

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'

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

谢谢!

2 个答案:

答案 0 :(得分:2)

@eltoro大部分都是正确的,数组没有update方法,使用Group.update的建议很好,但更新语法缺少$ { {1}}。

subscribers.$.level

答案 1 :(得分:0)

我认为您收到错误是因为您在实例上调用了update而不是模型。

也许尝试这样的事情:

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