2017-09-24 52 views
0

我正在使用下面的代碼來更新集合中的現有文檔。我想推新項目到一個數組。但是,腳本既不會引發異常也不會向數組添加任何內容。無法將新項目添加到MongoDB陣列

請求專家建議解決問題。

transportModel.findOne({ "name": req.body['providerName'], "contact.postalCode": parseInt(req.body['postalCode']) },function (err, doc) { 
    if (err) { 
     logger.error("Error while updating record : - " + err.message);      
    } else if (doc === null) { 
     logger.error("Error while updating record in transport details : - unable to update database");     
    } else { 

     doc.contact.addressLine1= req.body['addressLine1'] 
     doc.contact.addressLine2= req.body['addressLine2'] 

     //An array in transportModel. 
     //Add new items to array     
     doc.vehicle.push({ 
       vehicleType:req.body['vehicleType'],        
      })           
      doc.save() 
    }     
}); 
+0

胡亂猜測有,但不是'.push()'異步你的情況?如果是這種情況,也許'doc.save()'在實際推送之前執行。 – Seblor

+0

我的壞。我在保存文檔前返回響應。現在它工作正常 –

+0

有沒有什麼辦法檢查doc.save()是否返回任何錯誤? –

回答

0

嘗試$push方法:

transportModel.update(
    { ...your query here }, 
    { $push: { vehicle:{ vehicleType:req.body['vehicleType'] } } }, 
    done 
); 
+0

感謝您的支持。我的控制器代碼是正確的。我只是在return statement後放置了doc.save。我之前嘗試過使用findOneandUpdate函數的相同場景,並且拋出了一些錯誤。如果您可以看一下https://stackoverflow.com/questions/46387861/mongodb-findoneandupdate-function-is-inserting-new-document –