繁体   English   中英

在猫鼬不工作的情况下更新子数组对象

[英]Updating subarray object with Mongoose not working

我的MongoDB数据库主要文件如下所示:

    {
        "_id": {
            "$oid": "568ad3db59b494d4284ac191"
        },
        "name": "Myclass",
        "items": [
          {
            "name": "Conductive Gel",
            "internal_id": "ID00067",
            "description": "ECG Conductive Gel",
            "short_description": "ECG Conduct. Gel",
            "providers": [
              {
                "name": "one",
                "address": ""
              },
              {
                "name": "two",
                "address": ""
              }
            ]

          },
          {

          }
        ]
   }

好的,是,我收到了一个ajax put调用,该调用应该更新其中一项(与_id匹配的一项)。

我的方法:

exports.updateItem = function(req, res, next) { 


              classes.findOne({_id: '568ad3db59b494d4284ac19d'}, function(e,myclass){
                    if(!e) {

                      myclass.items.forEach(function(item){
                        if (item._id == req.body._id) {

                            item = req.body;
                            myclass.save(function(err, doc){


                                if (err) return next(err);
                                return res.status(200).send('The item has been updated!');
                            });
                        }                              
                      });

                    } else {
                        res.status(500).send('Class not folund in BBDD!!');
                    }
                });
};

问题是当我执行item = req.body; req.body信息未映射到项目猫鼬对象,并且数据库中的项目未更新。 我也没有任何错误。

我已经检查了req.body和item在我执行item = req.body;的那一刻具有完全相同的字段item = req.body;

另一方面,如果我执行item.name='whatever' ,那么它将起作用。

我已经为这个问题奋斗了4个小时,却没有解决方案...

我也尝试了Mongoose的findOneAndUpdate()查询,但没有成功。

如果将item分配给新值,则实际上并没有更改数组的内容。 item只是对数组中元素的引用。

您可能想要的是通过合并两个对象itemreq.body来编辑数组的内容。

require('extend'); // npm install extend
extend(item, req.body);

这实际上将更新数组中的值,然后将其保存。

但是,我建议按照以下说明使用猫鼬更新子文档猫鼬查找/更新子文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM