Mongodb 试图保存子文档更新时,删除父文档

Mongodb 试图保存子文档更新时,删除父文档,mongodb,mongoose,Mongodb,Mongoose,我试图保存对子文档的更新,但当我保存父文档时,父文档将消失(从而丢失包括更新在内的所有数据) 这是我的路线: router.put('/input/:parentid/:childid', urlencodedParser, function(req, res, next){ // Update Already Created Incident async function update(id){ let checkedUnits = [];

我试图保存对子文档的更新,但当我保存父文档时,父文档将消失(从而丢失包括更新在内的所有数据)

这是我的路线:

router.put('/input/:parentid/:childid', urlencodedParser, function(req, res, next){ 

    // Update Already Created Incident

       async function update(id){
          let checkedUnits = [];
          let timeEntries = [];
          recall = [];

          units.forEach(unit => {
             if(req.body[unit.id]){
                checkedUnits.push(unit._id);
             }
          });
          // console.log(personnel);
          personnel.forEach(person => {
             if(req.body[person._id]){
                let PERSON = {person: {personId: person._id}}
                recall.push(PERSON);
             }
          });
//===================FIND PARENT DOCUMENT===================================//
         CallData.findOne({_id: id}, (err, doc)=>{

//====================TARGET CORRECT SUBDOCUMENT by id =====================//
            subdoc = doc.incidents.id(req.params.childid);

//===========================UPDATE DOCUMENT=============================//
            date = moment(req.body.dispatchDate).format('YYYY-MM-DD')
            doc.date=date,
            subdoc.incidentNumber = req.body.incidentNumber;
            subdoc.callType = req.body.callType;
            subdoc.times.dispatch = moment(req.body.dispatchDate).format('MM/DD/YY')+' '+req.body.dispatchTime;
            subdoc.times.clear = moment(req.body.clearDate).format('MM/DD/YY')+' '+req.body.clearTime;
            subdoc.address.placeName = req.body.locationName;
            subdoc.address.streetAddress = req.body.streetAddress;
            subdoc.address.apt = req.body.apt;

            if(req.body.disposition !== "Choose..."){
               subdoc.disposition.selected = req.body.disposition;
            }

            subdoc.disposition.typed = req.body.other;
            subdoc.units = checkedUnits;
            subdoc.recall = recall;

//==============Save Document===============//
            doc.save(err=>{if(err){console.log(err)}); //<==============No error thrown here.
            res.json(doc); //<==================Produces a correct json of the updated doc.
         });
   }
   update(req.params.parentid);
});
router.put('/input/:parentid/:childid',urlencodedParser,函数(req,res,next){
//已创建事件的更新
异步函数更新(id){
让checkedUnits=[];
让timeEntries=[];
召回=[];
单位。forEach(单位=>{
if(请求正文[单元id]){
检查单元推送(单元id);
}
});
//控制台日志(人员);
人事费(个人=>{
if(请求主体[人员id]){
让PERSON={PERSON:{personId:PERSON.\u id}
召回、推送(人);
}
});
//=========================查找父文档===================================//
CallData.findOne({u id:id},(err,doc)=>{
//==============================按id确定正确的子文档目标=====================//
subdoc=doc.events.id(请求参数childid);
//=====================================更新文档=============================//
日期=时刻(请求正文。发送日期)。格式('YYYY-MM-DD')
单据日期=日期,
subdoc.incidentNumber=请求主体.incidentNumber;
subdoc.callType=req.body.callType;
subdoc.times.dispatch=时刻(请求正文dispatchDate)。格式('MM/DD/YY')+''+请求正文dispatchTime;
subdoc.times.clear=时刻(请求正文clearDate)。格式('MM/DD/YY')+''+请求正文clearTime;
subdoc.address.placeName=req.body.locationName;
subdoc.address.streetAddress=req.body.streetAddress;
subdoc.address.apt=req.body.apt;
如果(req.body.disposition!=“选择…”){
subdoc.disposition.selected=req.body.disposition;
}
subdoc.disposition.typed=req.body.other;
subdoc.units=checkedUnits;
subdoc.recall=调用;
//================保存文档===============//
doc.save(err=>{if(err){console.log(err)});//答案如下:

 date = moment(req.body.dispatchDate).format('YYYY-MM-DD')
它改变了日期格式,因此我找不到我的数据,我以为它被删除了,不是。只是被改变了

我已将代码更正为:

 date = moment(req.body.dispatchDate).format('YYYY/MM/DD')
现在我发现它工作得很好

谢谢你的帮助。

答案如下:

 date = moment(req.body.dispatchDate).format('YYYY-MM-DD')
它改变了日期格式,因此我找不到我的数据,我以为它被删除了,不是。只是被改变了

我已将代码更正为:

 date = moment(req.body.dispatchDate).format('YYYY/MM/DD')
现在我发现它工作得很好


谢谢你的帮助。

你能像这样在doc.save中移动res.json(doc)吗?
doc.save((err)=>{if(err){console.log(err);}res.json(doc);}
@SuleymanSah是的。仍然得到相同的结果。json返回正确,但父文档消失。也仍然没有错误。父文档从何处消失?从集合中删除了吗?找到了…我喜欢它太简单太愚蠢了。有什么问题吗?你能移动res.json(doc)吗在doc.save中是否这样保存?
doc.save((err)=>{if(err){console.log(err);}res.json(doc);})
@SuleymanSah是的。仍然得到相同的结果。json返回正确,但父文档消失。也仍然没有错误。父文档在哪里消失?它从集合中删除了吗?找到了…我喜欢它,因为它太简单了,太愚蠢了。有什么问题吗?