如何通过节点js中的数组索引更新数组元素

时间:2018-07-25 17:22:04

标签: javascript node.js mongodb

我想通过其索引号更新元素。我在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");
     }
    });
});

我收到以下错误:

  

解析错误:代码行name [i] .req.body.name上出现意外的标记[“,

2 个答案:

答案 0 :(得分:0)

经过一番谷歌搜索,我发现了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");
     }
    });
});

答案 1 :(得分:0)

您首先需要像这样构造对象, {$ 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");
          }
       });
 });