2016-09-07 83 views
0

我正在寻找一种非常简单的方法来复制我的数据库中的文档,但无法找到一种方法来做到这一点。重复猫鼬文档

我有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"); 
      } 
     }); 
    } 
}) 

如果不使用精益选项,猫鼬会返回一个猫鼬对象而不是简单的json。这就是为什么你无法直接将结果传递给第二个模式的构造函数的原因。使用精简查询,响应将是一个普通的JSON对象,可以传递给第二个模式的构造函数。欲了解更多信息,请检查this stackoverflow后返回一个计划对象作为从猫鼬的反应