如何克隆mongoose文档?

时间:2014-07-08 19:57:13

标签: node.js mongoose

这是对Easiest way to copy/clone a mongoose document instance?的跟进,对我来说并不适用。

以下代码抛出一个"无法编辑Mongo _id"字段,而不是擦除._id并在集合中创建新文档。

有没有更好的方法将文档的所有值克隆到新文档中,以供进一步使用/测试/等?

我在Mongoose 3.8.12 / Express 4.0上,我还在“未定义”中创建了一个新的ObjectID。 s1._id字段如下。

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 );
                });
         }
    );
});

2 个答案:

答案 0 :(得分:5)

您需要为要克隆的文档创建新ID并将isNew设置为true,因此“session”是您要克隆的文档:

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

答案 1 :(得分:4)

答案是:

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