2014-07-08 68 views
2

這是Easiest way to copy/clone a mongoose document instance?的後續處理,不適用於我。如何克隆貓鼬文檔?

以下代碼將拋出「無法編輯Mongo _id」字段,而不是擦除._id並在集合中創建新文檔。

有沒有更好的方法克隆一個文件的所有值到一個新的文件,爲進一步使用/測試/等?

我在Mongoose 3.8.12/Express 4.0上,我也測試過在下面的'undefined's1._id字段中創建一個新的ObjectID。

router.route('/:sessionId/test/:testId') 
    .post(function(req,res){   
     Session.findById(req.params.sessionId).exec(
     function(err, session) { 
      var s1 = new Session(); 
       s1 = session; 
       s1._id = undefined; 

       console.log('posting new test', s1._id);  // your JSON 
       s1.save(function(err) { 
        if (err) 
         res.send(err); 

        res.json('new session ', req.body); 
       }); 
     } 
    ); 
}); 
+1

感謝您回來並證明答案。但是,您應該自己添加這個答案(並接受它),而不是編輯問題。 –

+0

感謝您的指針。 – pretentiousgit

回答

4

答案是:

var s1 = new Session(session); 
s1._id = undefined; 
+0

如果沒有_id,你不能保存文件,這甚至可以工作嗎?請參閱http://stackoverflow.com/questions/25345274/mongoose-data-saving-without-id – Nepoxx

+0

如果您已在模式中定義了任何數組,則此方法將初始化空數組。 –

5

你需要創建一個新的ID爲要克隆的文件和設置isNew爲true,因此給予「會話」是要克隆的文件:

session._doc._id = mongoose.Types.ObjectId(); 
session.isNew = true; 
session.save(...);