3
我已经架构定义如下:
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]
});
我想无论是匹配和更新子文档行(在我的例子中,'权限'),或者如果不匹配,插入一个新的许可行(例如,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似乎接受了这一点(例如没有错误),但是数据库没有变化。我在mongo shell中也尝试了以下内容:
db.orgs.update({"name":"my_org", "permissions.$._id":"[email protected]"}, {$set: {"permissions.$.role": "member"}});
同样,Mongo接受查询,但没有更改。下面是我想修改文档:
{
"name" : "my_org",
"permissions" : [
{
"_id" : "[email protected]",
"role" : "admin"
}
]
}
有什么建议?非常感谢
感谢。这适用于我更新现有条目,但它不插入不存在的条目(我也添加了upsert = true)。你有关于upsert在这里工作的建议吗? –
我认为你在upsert上运气不佳。 “$”操作员文档特别警告不要将其用于“upsert”操作。 – mjhm