1

假设我有以下架构

 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);
          });
        }            
     })
  });
4

4 回答 4

0

尝试添加$exists到 update() 的查询参数。这将允许您仅在某个字段存在(或不存在)时更新文档。

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists

于 2012-07-09T15:32:36.117 回答
0

来自猫鼬 v3.1.2 指南:

strict 选项(默认启用)确保添加到模型实例中但未在我们的模式中指定的值不会保存到数据库中。注意:除非你有充分的理由,否则不要设置为 false。

strict 选项也可以设置为“throw”,这将导致产生错误而不是忽略坏数据。

http://mongoosejs.com/docs/guide.html#strict

于 2012-09-12T14:28:19.343 回答
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');
    });

  });

在上面的示例中,当我更新不存在的字段时没有收到错误消息。

于 2012-09-13T17:11:02.660 回答
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);
      });
    }            
  });
});
于 2014-07-25T01:29:16.647 回答