我的方法是获取文档实例,并从实例字段创建一个新实例.我相信有更好的方法.

推荐答案

你能解释一下"复制/克隆"是什么意思吗?你要在数据库中创建一个重复的文档吗?或者你只是想让你的程序中有两个var的重复数据?

如果你这么做:

Model.findById(yourid).exec(
    function(err, doc) { 
        var x = doc; 
        Model.findById(yourid).exec(
            function(err, doc2) {
                var y = doc2;
                // right now, x.name and y.name are the same
                x.name = "name_x";
                y.name = "name_y";
                console.log(x.name); // prints "name_x"
                console.log(y.name); // prints "name_y"
            }); 
    });

在这种情况下,xy将是程序中同一文档的两个"副本".

或者,如果您想在数据库中插入一份新的文档副本(尽管我假设使用的是不同的_id),则如下所示:

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

或者,如果您从一开始就这样做,也就是说您创建了一些文档d1,那么您可以在不设置_id的情况下调用save两次:

var d1 = new Model({ name: "John Doe", age: 54 });
d1.save(callback);
d1.save(callback);

现在,数据库中将有两个不同_id的文档,所有其他字段都相同.

这能澄清一点吗?

Mongodb相关问答推荐

会话的Mongo-go驱动程序版本.Copy()

在MongoDB查询中添加来自另一个集合的匹配文档的计数

在不知道字段名称的情况下如何引用 MongoDB 中的字段?

MongoDB:从开始日期和结束日期数组中匹配特定日期的聚合查询

MongoDB 支持的最 Big Data 库数

将 MongoDB BsonDocument 转换为字符串

在 mongoDB 中存储 java 8 LocalDate

oplog 在独立 mongod 上启用,不适用于副本集

什么是 Mongoose (Nodejs) 复数规则?

无法将 $match 运算符用于带有 ObjectId 的 mongodb/mongoose 聚合

使用 Node.js 和 mongodb 处理超时

Golang + MongoDB 嵌入类型(将一个 struct 嵌入到另一个 struct 中)

MongoDb 数据库与集合

MongoDB - 聚合 - 获取数组中的唯一项

文本的 MongoID 数据类型

如何从 Mongoose 模型对象中获取集合名称

如何在第一个文档中恢复 MongoDB ChangeStream 而不仅仅是在我开始收听后更改

spring 数据MongoDB.生成id的错误

brew install mongodb 错误:Cowardly refusing to `sudo brew install' Mac OSX Lion

如何使用户的邮箱在 mongoDB 中唯一?