javascript - 使用 Mongoose 更新子数组对象不起作用

标签 javascript node.js mongoose

我的 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 信息未映射到 item mongoose 对象中,并且数据库中的项目未更新。我也没有收到任何错误。

我在执行 item = req.body; 时检查了 req.body 和 item 都具有完全相同的字段。

如果我这样做 item.name='whatever' ,另一方面,它会起作用。

我已经与这个问题斗争了 4 个小时,但没有解决...

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

最佳答案

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

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

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

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

但是,我建议使用 mongoose 更新子文档,如下所述:Mongoose find/update subdocument

关于javascript - 使用 Mongoose 更新子数组对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046875/

相关文章:

node.js - Mongoose:无法转换 ISO 日期

node.js - Mongoose 连接 Atlas 失败

javascript - Angular js如何播放视频(视频播放器)

javascript - Angular 6 将值(value)从一项服务传递到另一项服务?

javascript - Jquery - 条件为 true 的第一个实例

node.js - 使用 websockets (socket.io) 进行 sails 0.10.x

Javascript-如何使用相同的onkeydown事件在不同场合调用不同的函数

javascript - 单元测试 nodejs 事件

node.js - 使用Nightmare检查当前页面的URL

javascript - 使用 mongoose 的 Mongo 自定义排序策略