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

时间:2014-04-03 16:20:57

标签: mongodb

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

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

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

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

this.keyword: "+" + this.keyword

2 个答案:

答案 0 :(得分:14)

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

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}})  
})

答案 1 :(得分:3)

不,在使用SQL查询时,无法在文档本身上引用值。

我建议查询文档,在您的网络/应用服务器上更新它,然后将值更新回mongodb。

您还会发现上面的更新命令会擦除整个文档,只留下关键字字段。您应该使用$set修饰符来更新字段或字段集。

db.placements.update(
    {
        program_id:{$in:[113,107]}, 
        keyword:{$regex:'^[0-9]', $options:'i'}
    }, 
    { $set: {keyword: new_value}})