重复的猫鼬文件

时间:2016-09-07 09:16:49

标签: node.js mongodb mongoose

我正在寻找一种在我的数据库中复制文档的一种非常简单的方法,但却无法找到方法。

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

1 个答案:

答案 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帖子