Adicionar novo campo a todos os documentos em uma coleção do MongoDB

Como posso adicionar um novo campo a cada documento em uma coleção existente?

Eu sei como atualizar o campo de um documento existente, mas não como adicionar um novo campo a cada documento em uma coleção. Como posso fazer isso no shell mongo ?

O mesmo que o campo atualizar coleção existente, $set adicionará novos campos se o campo especificado não existir.

Confira este exemplo:

 > db.foo.find() > db.foo.insert({"test":"a"}) > db.foo.find() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" } > item = db.foo.findOne() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" } > db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}}) > db.foo.find() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" } 

EDITAR:

Caso você queira adicionar um new_field a toda sua coleção, você tem que usar o seletor vazio, e setar multi-flag para true (last param) para atualizar todos os documentos

 db.your_collection.update( {}, { $set: {"new_field": 1} }, false, true ) 

EDITAR:

No exemplo acima, os últimos 2 campos false, true especificam o upsert e multi flags.

Upsert: Se definido como true, cria um novo documento quando nenhum documento corresponde aos critérios da consulta.

Multi: se definido como verdadeiro, atualiza vários documentos que atendem aos critérios da consulta. Se definido como falso, atualiza um documento.

Isto é para versions Mongo anteriores ao 2.2 . Para versões mais recentes, a consulta é alterada um pouco

 db.your_collection.update({}, {$set : {"new_field":1}}, {upsert:false, multi:true})