小智 67
以下用于克隆Amelia上面的响应中的文档的代码不起作用:
Model.findById(yourid).exec(
function(err, doc) {
var d1 = doc;
d1._id = /* set a new _id here */;
d1.save(callback);
}
);
Run Code Online (Sandbox Code Playgroud)
您还需要重置
d1.isNew = true;为:
Model.findById(yourid).exec(
function(err, doc) {
doc._id = mongoose.Types.ObjectId();
doc.isNew = true; //<--------------------IMPORTANT
doc.save(callback);
}
);
Run Code Online (Sandbox Code Playgroud)
Cai*_*tos 11
我的两分钱:
const doc = await DocModel.findById(id);
let obj = doc.toObject();
delete obj._id;
const docClone = new DocModel(obj);
await docClone.save();
Run Code Online (Sandbox Code Playgroud)
Ama*_*lia 10
你能澄清"复制/克隆"的含义吗?你打算在数据库中创建一个重复的文档吗?或者你只是想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"
});
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,x并且y将你的程序中的两个相同的文档的"副本".
或者,如果您想将doc的新副本插入到数据库中(尽管_id我假设不同),它将如下所示:
Model.findById(yourid).exec(
function(err, doc) {
var d1 = doc;
d1._id = /* set a new _id here */;
d1.save(callback);
}
);
Run Code Online (Sandbox Code Playgroud)
或者如果你从一开始就这样做,也就是你创建了一些文档d1,你只需调用save两次而不设置_id:
var d1 = new Model({ name: "John Doe", age: 54 });
d1.save(callback);
d1.save(callback);
Run Code Online (Sandbox Code Playgroud)
现在将有两个文档_id在您的数据库中具有不同的和所有其他字段相同.
这会澄清一些事情吗?
| 归档时间: |
|
| 查看次数: |
22104 次 |
| 最近记录: |