我正在寻找一种在我的数据库中复制文档的一种非常简单的方法,但却无法找到方法。
我有2个模型具有完全相同的模式。
我正在做的是
1stDB.findOne({id:"1"}, function(error, results){
if(!error){
var 2ndb = new 2nDB(results);
2nd.save(function (err) {
if (err) {
return err;
}
else {
console.log("SUCCESSFULL");
}
});
}
})
似乎存在问题,因为我的控制台results
格式正确但只是不会保存。
但如果我手动执行:2ndb.anyfield = anyvalue
它可以正常工作。
我认为这可能与承诺有关?但我不是很熟悉这个概念,可能是错的。
我试过这个:
1stDB.findOne({id:"1"}, function(error, results){
if(!error){
var 2ndb = new 2nDB(**{results}**);
2nd.save(function (err) {
if (err) {
return err;
}
else {
console.log("SUCCESSFULL");
}
});
}
})
和这(希望删除_id并保持我的自定义.id字段以识别类似的文档,但仍然有文件的uniq _id可以工作,但它没有)
1stDB.findOne({id:"1"}, function(error, results){
if(!error){
**var objectResponse = results;
delete objectResponse._id;**
var 2ndb = new 2nDB(results);
2nd.save(function (err) {
if (err) {
return err;
}
else {
console.log("SUCCESSFULL");
}
});
}
})
答案 0 :(得分:1)
您可以使用以下内容来获得所需的结果
1stDB.findOne({id:"1"}).lean().exec(function(error, results){
if(!error){
var objectResponse = results;
delete objectResponse._id;
var 2ndb = new 2nDB(objectResponse);
2nd.save(function (err) {
if (err) {
return err;
}
else {
console.log("SUCCESSFULL");
}
});
}
})
如果不使用lean选项,mongoose将返回一个猫鼬对象而不是简单的json。这就是您无法将结果直接传递给第二个模式的构造函数的原因。使用精简查询,响应将是一个普通的JSON对象,可以传递给第二个模式的构造函数。有关更多信息,请在返回计划对象作为mongoose的响应时检查this stackoverflow帖子