在Mongo命令行中搜索和替换

时间:2018-06-27 15:04:25

标签: linux mongodb

我可以找到所有first_name的值

> db.users.find().forEach( function(myDoc) { print( "first_name: " + myDoc.first_name ); } );
first_name: test1
first_name: test2
first_name: test3
first_name: test4
> 

但是当我尝试将它们全部更改为testing时,我会得到

> db.users.find().forEach( function(myDoc) { $set: {myDoc.first_name: "testing"};  } );
2018-06-27T16:58:54.268+0200 E QUERY    SyntaxError: Unexpected token :
> 

问题

谁能看到为什么不将所有first_name值替换为testing的原因?

1 个答案:

答案 0 :(得分:2)

您的代码存在的问题是$set只能在update语句内使用,因为它是字段更新运算符。因此您的代码可以更改为:

db.users.find().forEach( function(myDoc) { db.users.update({_id: myDoc._id}, { $set: { first_name: "testing"} } ) ;  } );

可以在不获取所有文档的情况下实现:

db.users.update({}, { $set: { first_name: "testing3"} }, { multi: true } )

或者如果您想在forEach内修改文档,则可以在Mongo shell中使用.save()方法,例如:

db.users.find().forEach( function(myDoc) { myDoc.first_name = "testing2"; db.users.save(myDoc); } );