Jj's web stream

Como agregar un campo a todos los elementos en una collección Mongo

Lo acabo de poner en inglés., pero también lo buscarán en español. Asó que aquí va.

Escribo esto por que encontrar la respuesta me tomó más de lo que esperaba. Finalmente estaba en StackOverflow, pero la pondré acá de nuevo explicando como funciona.

Como las bases de datos Mongo no tienen esquema, no existe comando ALTER TABLEpara agregar un nuevo campo a todos los elementos, lo que se hace es actualizar la colección por medio del comando update.

La documentación de Update es muy escasa al respecto y el mapeo de SQL a Mongo tampoco indica nada al respecto.

Así es como se hace una modificación a todos los elementos sin ninguna condición en particular:

db.collection.update( criteria, objNew, upsert, multi )

Queremos actializar todos así que nuestra condición será un objeto vacío.

{}

Queremos añadir un nuevo atributo a todos los objetos, así que usaremos la clave "$set" para hacerlo. El valor que mandemos tendrá la forma de un documento que combinaremos con cada uno de los elementos.

{'$set': {new_key:value}}

No queremos Upsert, asi que vamos a poner False ahí. Si mandaramos True, además de modificar los documentos, agregaríamos un nuevo elemento a al colección con el documento que estamos enviando como dato, y eso no queremos.

En multi, decimos que sí: True, esto es necesario para que se actualice toda la colección y no sólo el primer elemento.

El comando quedaríá así:

db.collection.update( {}, {'$set': {new_key:value}}, false, true)