2014-07-08 4 views
2

Ceci est une suite à Easiest way to copy/clone a mongoose document instance?, qui ne fonctionne pas pour moi.Comment cloner un document mangouste?

Le code suivant lève un champ "Impossible d'éditer Mongo _id", plutôt que d'effacer le fichier ._id et de créer un nouveau document dans la collection.

Existe-t-il un meilleur moyen de cloner toutes les valeurs d'un document dans un nouveau document, pour un usage ultérieur/testing/etc?

Je suis sur Mongoose 3.8.12/Express 4.0, et j'ai également testé cela en créant un nouvel ObjectID dans le champ 'undefined' s1._id ci-dessous.

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

Merci de revenir et de prouver la réponse. Cependant, vous devriez ajouter ceci comme réponse vous-même (et l'accepter) plutôt que d'éditer la question. –

+0

Merci pour le pointeur. – pretentiousgit

Répondre

4

La réponse est:

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

Vous ne pouvez pas enregistrer un document sans _id, comment cela peut-il même fonctionner? Voir http://stackoverflow.com/questions/25345274/mongoose-data-saving-without-id – Nepoxx

+0

Cette méthode initialise des tableaux vides si vous avez défini des tableaux dans le schéma. –

5

Vous devez créer un nouvel identifiant du document que vous souhaitez cloner et définir isNew true, donc donné « session » est le document que vous voulez clone :

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