2017-09-21 17 views
1

私はマングースフィールドXを持っています。 私はそれを照会し、そのデータを更新します。どのように* mongoose文書を保存しない?

特定の条件では、新しいコピーのみを新しいデータとともにDBに保存する必要があります(元のデータはクエリの前と同じままでなければなりません)。

しかし、何とかmongooseは.save()コマンドで質問しても元のドキュメントを保存します。

X.findById(req.params.id) 
    .exec(function (err, original) { 

     original.name = 'newName'; 

     if(condition){ 
      var copy = new X(original); 
      copy.isNew = true; 
      copy._id = mongoose.Types.ObjectId() 

      X.collection.insert(copy, callback(){}) 

     }else{ 

      original.save(); 

     } 

+0

あなたのスキーマを表示してください。 – Lazyexpert

+0

_condition_にはどのような値がありますか? – TGrif

+0

xの値の一部の文字列。彼らは触れていません – Yoav

答えて

0

Mongooseは、既存のMongooseオブジェクトを引数として使用してコンストラクタを実行するときに、いくつかの魔法を実行している可能性があります。

最初に、後で変更するのではなく、最初に_idを付けずにコンストラクタを実行しようとします。 lodashと例:

const copy = new X(_.omit(original, ['_id'])); 

第二に、私は明示的にのみ必要なフィールドを渡して試してみた:

const { field1, field3, field3 } = original; 
const copy = new X({ field1, field2, field3 }); 

またはlodashとを:

const copy = new X(_.pick(original, ['field1', 'field2', 'field3'])); 

そして、他のすべては、私が試してみた失敗した場合thrirdそれをシリアル化してJSONとして逆シリアル化して、すべての魔法がなくなったことを確認してください:

const { field1, field3, field3 } = JSON.parse(JSON.stringify(original)); 
const copy = new X({ field1, field2, field3 }); 

か:

const copy = new X(JSON.parse(JSON.stringify(_.pick(original, ['f1', 'f2']))); 

例外を処理、またはtryjsonのようなモジュールを使用するtry/catchブロックでJSONのopertaionsを実行することを確認します。

+0

こんにちは、ありがとう、私はそれが問題ではなかったと思う - 問題は、mongooseは、元のオブジェクトをDBに保存するとき、それはsave()コマンドを持たないときです。私はあなたの提案をすべて試みましたが、問題はまだ立っています – Yoav

関連する問題