Cómo copiar una gran cantidad de documentos de una colección a otra de manera eficiente

Estoy usando un controlador C# para Mongo db y quiero implementar el cambio de tamaño de las colecciones limitadas. Seguí un consejo de este https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be, que sugiere crear una nueva colección con un nombre temporal, copiar los documentos de la colección anterior, eliminar la colección anterior y cambiar el nombre de la nueva. Pero, ¿cómo puedo hacer esto de manera eficiente? El tamaño de la colección actual es de 700 Mb y lleva bastante tiempo copiar todos los datos. Es probable que ejecute este código en una máquina donde se ejecuta el servidor

preguntado el 27 de julio de 12 a las 16:07

2 Respuestas

La forma más eficiente de cambiar el tamaño de una colección limitada sigue siendo crear una nueva, copiar los documentos, luego cambiar el nombre de la colección anterior y cambiar el nombre de la nueva como se explica en el documento al que se hace referencia. https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be.

Nota:: Solo asegúrese de que nadie esté insertando / actualizando la colección anterior cuando cambie. Si ejecuta ese código en un db.eval ("....") bloqueará el servidor mientras se ejecuta.

contestado el 23 de mayo de 17 a las 13:05

Pero, ¿cómo puedo hacer esto de manera eficiente?

Realmente no puedes. Esa respuesta anterior es de Scott Hernandez, quien trabaja como ingeniero de soporte para 10gen (la empresa detrás de MongoDB). Él conoce MongoDB mejor que nadie en el planeta, por lo que si su respuesta no funciona, debe pensar en algo. completamente diferente.

Para algo completamente diferente...

Pruebe una solución a través del código.

Cree una nueva colección limitada y modifique su código para escribir en la nueva colección pero para leer tanto de la nueva como de la antigua. Será un poco más lento (debe verificar ambas colecciones antes de escribir). Pero eventualmente todos sus datos estarán en la nueva colección y puede detener las lecturas de la anterior.

Respondido 27 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.