如何克隆mongoose文档?

5
这是对 如何复制/克隆Mongoose文档实例的最简单方法? 的跟进,但对我无效。
以下代码会引发“无法编辑Mongo _id”字段,而不是清除 ._id 并创建集合中的新文档。
是否有更好的方法将文档的所有值克隆到一个新文档中,以供进一步使用/测试等?
我使用的是 Mongoose 3.8.12/Express 4.0,并且还在下面未定义的 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 );
                });
         }
    );
});

1
感谢您回来并提供答案。但是,您应该将其作为自己的答案添加(并接受它),而不是编辑问题。 - Don Cruickshank
感谢指针。 - pretentiousgit
2个回答

8

您需要为想要克隆的文档创建一个新的id并将isNew设置为true,因此,如果给定的"session"是您想要克隆的文档:

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

7
答案是:
var s1 = new Session(session);
s1._id = undefined;

没有_id,你怎么可能保存文档呢?参见https://dev59.com/sILba4cB1Zd3GeqPgI0Y - Nepoxx
如果您在模式中定义了任何数组,则此方法将初始化空数组。 - Ivan Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接