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

  });

In the expample above I don't get an error when I do update a not existing field.

于 2012-09-13T17:11:02.660 に答える
0

$existsupdate()のクエリパラメータに追加してみてください。これにより、特定のフィールドが存在する(または存在しない)場合にのみドキュメントを更新できます。

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

于 2012-07-09T15:32:36.117 に答える
0

Mongoose v3.1.2 ガイドから:

strict オプション (デフォルトで有効) は、スキーマで指定されていないモデル インスタンスに追加された値がデータベースに保存されないようにします。注: 正当な理由がない限り、false に設定しないでください。

strict オプションを「throw」に設定することもできます。これにより、不良データを無視する代わりにエラーが生成されます。

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

于 2012-09-12T14:28:19.343 に答える