码迷,mamicode.com
首页 > 编程语言 > 详细

mongoose修改数组中某个特定的值

时间:2017-04-22 20:39:04      阅读:1597      评论:0      收藏:0      [点我收藏+]

标签:return   tom   表达   mod   写代码   name   doc   code   article   

如果一个文档中有个类型为字符串数组的字段,比如{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修改数组中某个特定的值

标签:return   tom   表达   mod   写代码   name   doc   code   article   

原文地址:http://www.cnblogs.com/toward-the-sun/p/6749031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!