Easiest way to copy/clone a mongoose document instance?

fusio picture fusio · Aug 20, 2013 · Viewed 28k times · Source

My approach would be to get the document instance, and create a new one from the instance fields. I am sure there is a better way to do it.

Answer

jlchereau picture jlchereau · Sep 15, 2014

The following code to clone documents in Amelia's response above does not work:

Model.findById(yourid).exec(
    function(err, doc) {
        var d1 = doc;
        d1._id = /* set a new _id here */;
        d1.save(callback);
    }
);

You also need to reset d1.isNew = true; as in:

Model.findById(yourid).exec(
    function(err, doc) {
        doc._id = mongoose.Types.ObjectId();
        doc.isNew = true; //<--------------------IMPORTANT
        doc.save(callback);
    }
);