【问题标题】:Attempting to save subdocument update, deletes the parent尝试保存子文档更新,删除父
【发布时间】:2020-07-18 11:32:08
【问题描述】:

我正在尝试将更新保存到我的子文档,但是当我保存父文档时消失了(因此丢失了包括更新在内的所有数据)。

这是我的路线:

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);
});

一旦在文档上运行上述操作,它就会从数据库中消失。我不确定为什么 doc.save 正在删除文档。

我尝试过使用 async/await 和 CB。我不确定如何在子文档数组中选择正确的子文档。 Mongoose 的文档说要执行 ```parent.sub.id(_id)`` 来选择它,但我觉得这是我出错的地方。

感谢您的任何见解。 -亚当

【问题讨论】:

  • 你能像这样在 doc.save 中移动 res.json(doc) 吗? doc.save((err) =&gt; { if (err) { console.log(err); } res.json(doc); });
  • @SuleymanSah 是的。仍然得到相同的结果。 json 恢复正确,但父文档消失了。也仍然没有错误。
  • 父文档在哪里消失?是否已从收藏夹中删除?
  • 想通了...我喜欢它,因为它太简单了,但很愚蠢。
  • 出了什么问题?

标签: mongodb mongoose


【解决方案1】:

答案就在这里:

 date = moment(req.body.dispatchDate).format('YYYY-MM-DD')

它正在更改日期格式,因此我找不到我的数据,我以为它正在被删除,但事实并非如此。刚刚换了。

我已将代码更正为:

 date = moment(req.body.dispatchDate).format('YYYY/MM/DD')

现在我的效果很好。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 2020-02-26
    • 2021-04-20
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多