Поиск и замена в командной строке Mongo - PullRequest
0 голосов
/ 27 июня 2018

Я могу найти все 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 голосов
/ 27 июня 2018

Проблема с вашим кодом в том, что $ 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, вы можете использовать метод .save() в оболочке Mongo, например:

db.users.find().forEach( function(myDoc) { myDoc.first_name = "testing2"; db.users.save(myDoc); } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...