使用mongoose升级子文档

时间:2013-01-09 23:23:03

标签: node.js mongodb express mongoose

  

可能重复:
  Can mongo upsert data?

我的模式定义如下:

var Permission = new Schema({
  _id: String,  // email address
  role: String  // "admin" or "member"
});

var Org = new Schema({
  name: {type: String, index: {unique: true, dropDups: true}, trim: true},
  permissions: [Permission]
});

我正在尝试匹配并更新子文档行(在我的情况下,'权限',或者如果没有匹配则插入新的permissins行(例如upsert)。

这是我写的:

exports.updatePermissions = function(req, res) {
  return Org
    .update(
      {name:"my_org", "permissions.$._id": req.body.email},
      {$set: {"permissions.$.role": req.body.role}})
    .exec(function(err) {
      // stuff
    });
};

MongoDB似乎接受了这个(例如没有错误),但是DB没有变化。我也在mongo shell中尝试了以下内容:

db.orgs.update({"name":"my_org", "permissions.$._id":"newuser@email.com"}, {$set: {"permissions.$.role": "member"}});

再一次,Mongo接受了查询,但没有改变。这是我要修改的文档:

{
    "name" : "my_org",
    "permissions" : [
        {
            "_id" : "newuser@email.com",
            "role" : "admin"
        }
    ]
}

有什么建议吗?非常感谢

1 个答案:

答案 0 :(得分:0)

这适用于我$elemMatch,还可以查看rules for the $ operator

db.orgs.update({"name":"my_org", "permissions": {$elemMatch: {_id:"newuser@email.com"}}},
     {$set: {"permissions.$.role": "member"}});