我想通过其索引号更新元素。我在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上出现意外的标记[“,
答案 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");
}
});
});