Javascript Can';t使用RESTful api put更新mongo数组

Javascript Can';t使用RESTful api put更新mongo数组,javascript,angularjs,node.js,mongodb,express,Javascript,Angularjs,Node.js,Mongodb,Express,我对MEAN stack非常陌生,最近完成了一个教程,并一直在尝试进一步开发它。这是一个使用RESTful api更新mongo db的简单应用程序。现在,我使用put语句更新集合中文档的某些部分。唯一的问题是,当我尝试使用这个put语句更新数组时,我得到一个500错误。这是我的Server.js文件中的put语句: app.put('/users/:id', function (req, res) { var id = req.params.id; console.lo

我对MEAN stack非常陌生,最近完成了一个教程,并一直在尝试进一步开发它。这是一个使用RESTful api更新mongo db的简单应用程序。现在,我使用put语句更新集合中文档的某些部分。唯一的问题是,当我尝试使用这个put语句更新数组时,我得到一个500错误。这是我的Server.js文件中的put语句:

app.put('/users/:id', function (req, res) {
      var id = req.params.id;
      console.log(req.body.name);
      db.users.findAndModify({
        query: {_id: mongojs.ObjectId(id)},
        update: {$set: {name: req.body.help.name, email: req.body.email, number:                    req.body.number}},
        new: true}, function (err, doc) {
      res.json(doc);
    }    
  );
});
如果您注意到
body.email
body.number
更新语句非常有效。然而,我尝试制作一个非常简单的数组来测试这个主题。在我的一个用户文档中,我有一个数组

"help" : [ 
        {
            "name" : "test"
        }
    ],

我想做的就是找出如何更改数组中的值。put语句非常适合更改mongo文档中的字符串,但不适合更改数组。我注意到
req.body.string
是您访问它的方式,所以我想我要做的就是添加到它中,所以在本例中
req.body.help.name
。但是这不起作用,我得到的只是控制台日志中的一个500错误。任何帮助都将不胜感激

所以答案是,我没有在findandmodify的更新部分的$set中包含数组。代码中应该是这样的:
更新:{$set:{help:{name:req.body.help.name}}

我认为您需要使用req.body.help.name,而不是req.body.help[0].name,因为您有一个对象数组作为help对象的值。其他请将其更改为帮助:{name:'value'}。另外,请确保您在打印console.log(req.body)时收到了参数。此外,您正在查看的500错误是否在浏览器控制台中?您需要查看nodjs应用程序运行的“终端”以查看nodejs错误,因此请确保使用res.send()或类似方法发送响应。。但是,再次检查终端输出以查看nodejs执行错误,我认为您在update:property after req.body.mail,number:new:true}的语法中有错误。我在终端中遇到的错误是传入的参数必须是一个12字节的字符串或一个24个十六进制字符的字符串。我尝试了这两种答案,但都无法使其正常工作。这似乎与以下行有关:query:{{u id:mongojs.ObjectId(id)},假设您已经在谷歌上搜索了,那么您可以编写
console.log(err)
before
res.json(doc)并告诉我们错误到底是什么?。我的猜测就像ecarrizo所说的
req.body.help[0]。name
而不是
req.body.help.name
,因为您处理的是数组。PS:有点离题,但我个人建议对节点应用程序使用
mongoose
。但我想,这是个人偏好的问题