我需要找到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
答案 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}})