university tutorial example descargar caracteristicas mongodb

example - mongodb tutorial



MongoDB 1.6.5: cómo cambiar el nombre del campo en la colección (2)

La función $ rename solo está disponible en la versión de desarrollo 1.7.2. ¿Cómo cambiar el nombre del campo en 1.6.5?


La forma más sencilla de realizar una operación de este tipo es recorrer el conjunto de datos volviendo a asignar el nombre del campo. La forma más fácil de hacer esto es escribir una función que realice la reescritura y luego usar la .find().forEach() en el shell.

Aquí hay una muestra del shell:

db.foo.save({ a : 1, b : 2, c : 3}); db.foo.save({ a : 4, b : 5, c : 6}); db.foo.save({ a : 7, b : 8 }); db.foo.find(); remap = function (x) { if (x.c){ db.foo.update({_id:x._id}, {$set:{d:x.c}, $unset:{c:1}}); } } db.foo.find().forEach(remap); db.foo.find();

En el caso anterior, estoy haciendo un $unset y un $set en la misma acción. MongoDB no admite transacciones entre colecciones, pero lo anterior es un solo documento. Así que tienes la garantía de que el conjunto y el desarmado serán atómicos ( es decir, ambos tienen éxito o ambos fallan ).

La única limitación aquí es que deberá administrar escritores externos para mantener los datos consistentes. Mi preferencia habitual para esto es simplemente desactivar las escrituras mientras se actualiza. Si esta opción no está disponible, tendrá que averiguar qué nivel de coherencia desea para los datos. (Puedo proporcionar algunas ideas aquí, pero realmente serán específicas para sus datos y su sistema)


db.collection_name.update({}, {$rename: {"oldname": "newname"}}, false, true);

Esto cambiará el nombre de la columna para cada fila en la colección.

Además, descubrí que si su columna (la que está cambiando de nombre) aparece dentro del catálogo de índice (db.collection_name.getIndexes ()), entonces tendrá que eliminar y volver a crear el índice (usando el nuevo nombre de columna ) además.