2

質問 ( Mongoose save all parameters from request body ) は、コード行でリクエスト本文を使用して新しい mongoose ドキュメント オブジェクトを作成する方法を示しています。
この質問を拡張して、マングース文書オブジェクトのすべてのフィールドを一度に設定する方法を知りたいです。

router.route('/car')
.put(function(req, res, next) {
  Car.findById(req.params.id, function (err, car) {
    if (err) {
      res.status(400).send(err);
    } else {
      if (!car)
        return next(new Error('Failed to load car: ' + req.params.id));

      car.name = req.body.name; // Code refactoring required
      car.seats = req.body.seats;
      car.engine_size = req.body.engine_size; 

      car.save(function(err) {
          if(err)
            res.status(400).send(err);
          else
            res.json(car);
      });
    }
  });
});

ドキュメントの作成var car = new Car(req.body);では、リクエスト本文からフィールドに入力するのに最適な方法です。
既存のマングース文書を更新するには、以下の行よりも良い方法があります:

car.name = req.body.name;
car.seats = req.body.seats;
car.engine_size = req.body.engine_size; 
4

3 に答える 3

4

find の代わりに update を使用する必要があります。

router.route('/car')
.put(function(req, res, next) {
  Car.update({ _id: mongoose.Types.ObjectId(req.params.id) },req.body)
    .then(function (success) {
      res.json();
    })
    .catch(function (error) {
        res.status(404).send(err);
    });
});
于 2016-04-30T05:52:09.503 に答える
2

Document.set()を使用できます。

car.set(req.body)
try {
    await car.save()                  
}catch(err){ 
    console.error(e)
}
于 2020-12-23T12:57:33.847 に答える
0

既存のマングース文書を更新するには、以下の行よりも良い方法はありますか?

ネットワーク データの利用とパフォーマンスを向上させるために、update() メソッドは既存のドキュメントの値を更新し、save() メソッドは既存のドキュメントを save() メソッドで渡されたドキュメントに置き換えることに注意してください。

したがって、モデルが大きく、少数のフィールドのみを更新する場合は、更新がより適切なオプションです。

お役に立てれば。

于 2016-04-30T06:14:05.747 に答える