我可以找到所有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
的原因?
答案 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); } );