首页 > 代码库 > mongoose修改数组中某个特定的值
mongoose修改数组中某个特定的值
如果一个文档中有个类型为字符串数组的字段,比如{id:1,tags:[‘aa‘,‘bb‘,‘cc‘]},现在要将tags字段的‘bb‘改为‘BB‘,之前的办法是这样写的:
articleModel.find({tags:{$all:[doc.name]}},function(err,articles){ articles.forEach(function(article){ for(var j = 0;j<article.tags.length;j++){ if(article.tags[j] === doc.name){ article.tags[j] = req.body.name; article.markModified(‘tags‘); article.save(); break; } } }) })
上面代码的意思,在article集合中找到所有文档的tags字段包含有doc.name的记录,然后遍历找到的结果集,循环更新每条记录。这样写代码繁琐,效率又不高,后面在这里找到灵感http://cnodejs.org/topic/541be549ad60405c1f02f660,改善后的代码如下:
articleModel.update({tags:{$all:[doc.name]},tags:doc.name,$atomic:true},{$set:{"tags.$":req.body.name}},{multi:true},function(err){ if(err) return console.log(err); console.log(‘文章更新成功‘); })
下面这样写也可以,我猜想需要被修改的字段只要出现在第一个参数的条件表达式中就可以了
articleModel.update({tags:{$all:[doc.name]},$atomic:true},{$set:{"tags.$":req.body.name}},{multi:true},function(err){ if(err) return console.log(err); console.log(‘文章更新成功‘); })
mongoose修改数组中某个特定的值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。