使用正则表达式更新mongo db文档

use*_*587 5 mongodb

我需要在mongodb中找到所有关键字以1-9开头的文档,然后在关键字前添加一个"+",我可以轻松找到文档,但无法弄清楚如何更新它们.

我试过这个,但它不起作用

db.placements.update({program_id:{$in:[113,107]},
                     keyword:{$regex:'^[0-9]', $options:'i'}}, 
                     {keyword:"+"+$keyword})
Run Code Online (Sandbox Code Playgroud)

它无法识别$ keyword,我也试过'.keyword','keyword',它们都不起作用.有没有办法像Java一样引用文档本身,使用'this',所以我可以做类似的事情

this.keyword: "+" + this.keyword
Run Code Online (Sandbox Code Playgroud)

Ana*_*lan 15

您必须$set在更新查询中使用运算符来更新特定字段.此外,您无法在更新查询中连接字符串.一种方法是forEach()在shell中使用游标:

db.placements.find({program_id:{$in:[113,107]}, keyword:{$regex:'^[0-9]', $options:'i'}})
    .forEach(function(doc){ 
        db.placements.update({_id:doc._id}, {$set:{"keyword":"+" + doc.keyword}})  
})
Run Code Online (Sandbox Code Playgroud)