2016-09-07 128 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後返回一個計劃對象作爲從貓鼬的反應