假设我有以下架构
var userSchema = new Schema({
name : String
});
var User = mongoose.model('User',userSchema);
编辑:如果用户尝试更新字段,那就不存在,我需要抛出异常。我的问题是如何检查更新文档中不存在更新字段。这是我需要的一个小例子:
app.post('/user/update/:id', function (req, res) {
var field = req.param('field'),
value = req.param('value'),
id = req.param('id');
User.findOne({_id: id},function(err, user){
if(err) throw err;
if (user) {
user[field] = value; // Here is I need to check that field is exists
// in user schema. If does't I have to throw
// an execption.
user.save(function (err){
return res.send(200);
});
}
})
});
答案 0 :(得分:0)
尝试将$exists
添加到update()的查询参数中。这将允许您仅在某个字段存在(或不存在)时更新文档。
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists
答案 1 :(得分:0)
来自Mongoose v3.1.2指南:
strict选项(默认情况下启用)确保添加到模型实例中的未在我们的模式中指定的值不会保存到db。注意:除非您有充分的理由,否则不要设置为false。
strict选项也可以设置为“throw”,这将导致产生错误而不是忽略错误数据。
答案 2 :(得分:0)
var CollectionSchema = new Schema({name: 'string'}, {strict: 'throw'});
Collection.findById(id)
.exec(function (err, doc) {
if (err) {// handle error};
// Try to update not existing field
doc['im not exists'] = 'some';
doc.save(function (err) {
if (err) {
// There is no an errors
}
return res.json(200, 'OK');
});
});
在上面的示例中,当我更新不存在的字段时,我没有收到错误。
答案 3 :(得分:0)
您可以使用field
检查schema
中是否存在.schema.path()
。在您的特定用例中,您可以执行以下操作:
app.post('/user/update/:id', function (req, res) {
var field = req.param('field'),
value = req.param('value'),
id = req.param('id');
User.findOne({_id: id},function(err, user){
if(err) throw err;
if (user) {
if(User.schema.path(field)) {
user[field] = value;
} else {
throw new Error('Field [' + field + '] does not exists.');
}
user.save(function (err){
return res.send(200);
});
}
});
});