【问题标题】:How to update elements with array by its index in node js如何通过节点js中的索引更新数组元素
【发布时间】:2018-07-25 17:22:03
【问题描述】:

我想通过索引号更新元素。我在 Mongodb node.js 上有这样的数据:

{"_id" : ObjectId("5b533c33327d12098277c6a4"),
  "name":["aa","bb","cc"],
  "age":["45","50","40"],
   "home":["dd","ee","ff"]}

我想更改姓名、年龄和家中每个元素的值。我试过这样,但它不起作用。

router.put("/forms/data/edit/:index/:id", function(req,res){
  var i = req.params.index;
  Datastored.findByIdAndUpdate(req.params.id,{$set:{
     name[i]:req.body.name,
     age[i]:req.body.age,
     home[i]:req.body.home}},
    function(err){
        if(err){
          console.log(err)
           res.redirect("back");
        }else{
          console.log("data edited");
          res.redirect("/seealldata");
     }
    });
});

我收到以下错误:

解析错误: Unexpected token [ " , on the line of code, name[i].req.body.name

【问题讨论】:

  • 您能否详细说明您的代码“不起作用”的原因?你期待什么,实际发生了什么?如果您遇到异常/错误,请发布它发生的行和异常/错误详细信息。请edit这些详细信息,否则我们可能无法提供帮助。
  • 我不能使用上面的代码,因为它说“解析错误:Unexpected token [”,在代码行上,name[i].req.body.name,

标签: javascript node.js mongodb


【解决方案1】:

经过一番谷歌搜索,我找到了this question/answer。 请尝试以下操作:

router.put("/forms/data/edit/:index/:id", function(req,res){
  var i = req.params.index;
  Datastored.findByIdAndUpdate(req.params.id,{
    $set:{
     [`name.${i}`]: req.body.name,
     [`age.${i}`]: req.body.age,
     [`home.${i}`]: req.body.home
  }},
    function(err){
        if(err){
          console.log(err)
           res.redirect("back");
        }else{
          console.log("data edited");
          res.redirect("/seealldata");
     }
    });
});

【讨论】:

  • 我尝试了上面的代码,但它不起作用。它做console.log,数据编辑,没有错误显示。但是数据没有变化,或者我的数据库没有任何更新或变化。我不知道为什么
【解决方案2】:

你需要先像这样构造对象,{$set: {'field.2': value, ...}

router.put("/forms/data/edit/:index/:id", function(req,res){
  var i = req.params.index;
  var updateObj = { $set: {} };
  updateObj.$set["name."+i] = req.body.name;
  updateObj.$set["age."+i] = req.body.age;
  updateObj.$set["home."+i] = req.body.home;
  Datastored.findByIdAndUpdate(req.params.id, updateObj),
      function(err){
          if(err){
            console.log(err)
            res.redirect("back");
          }else{
            console.log("data edited");
            res.redirect("/seealldata");
          }
       });
 });

【讨论】:

  • 我尝试了上面的代码,但是当我尝试它时,页面一直忙于在编辑页面上搜索。我不知道原因。什么都没有发生,或者我的数据没有更新
  • @wzwd 你得到了什么错误信息?这将帮助我找到问题。
  • 没有显示错误。发生的事情是页面无法停止加载。编辑页面(用于提交帖子)无法停止加载,它一直在忙着加载。
  • 查找控制台中打印的内容。确保 req.params.id 值正确并存在于 mongo 集合文档中。
  • 我希望你明白我上面写的内容。例如,我将 console.logI(i) 放在 var i = req.params.index; 下面,它会打印值 1。没问题,但我认为它无法通过下一行代码,因为发送发布(编辑页面)无法停止加载。我等了一会儿,然后它在编辑页面上显示一个 html 错误,说 Error 502 - Bad Gateway ...
猜你喜欢
  • 1970-01-01
  • 2021-09-15
  • 2017-07-02
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多