Frist我已阅读并在mongoose-and-partial-select-update的帖子中尝试解决方案。 但是,当我尝试使用传统样式时,查询会起作用。
我的架构:
var userSchema = mongoose.Schema({
local: {
email: {
type: String,
index: {
unique: true,
dropDups: true
}
},
password: String,
displayName: String,
avatar: {
type: String,
default: "./img/user.png"
},
role: {
type: String,
default: "student"
},
ask_history: [
{
question_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'questionAnswer'
},
favorite: Boolean,
ask_time: Date
}
],
interest: [String]
}
})
工作更新功能:
User.findById(id, function(err, User) {
if (err) {
throw done(err);
}
if (!User) {
return;
}
User.local.role = "admin";
User.save(function(err, updatedUser) {
if (err) {
throw err
} else {
//good
}
})
});
但是,如果我这样做:
User.update({_id : id},
{$set{
local:{role:"admin"}
}
},function(...){...}
});
上面的代码会将用户覆盖为:
{
_id : "...",
local: {
role : "admin"
}
}
我读到$只会更新属性,我做错了吗?
答案 0 :(得分:2)
位置运算符$使用子文档数组。
在您的情况下,您只有一个子文档,因此以下内容应该有效:
User.update({_id : id},
{ $set
{
"local.role": "admin"
}
}, function(...){...}
});