2010-11-19 19 views

Respuesta

38

Básicamente necesita crear una nueva colección con el tope y copiar los documentos en ella. Esto se puede hacer muy fácilmente en javascript (shell), o en el idioma de su elección.

db.createCollection("new", {capped:true, size:1073741824}); /* size in bytes */ 
db.old.find().forEach(function (d) {db.new.insert(d)}); 
db.old.renameCollection("bak", true); 
db.new.renameCollection("old", true); 

Nota: Sólo asegúrese de que nadie está insertando/actualización de la antigua colección cuando se cambia. Si ejecuta ese código en un db.eval ("...."), bloqueará el servidor mientras se ejecuta.

Hay una solicitud de función para aumentar el tamaño de una colección existente: http://jira.mongodb.org/browse/SERVER-1864

40

Esto es lo que hago para cambiar el tamaño de las colecciones tapados:

db.runCommand({"convertToCapped": "log", size: 1000000000}); 

que ya tiene una colección de casquillo llamado "registro" . Así que simplemente ejecuto el "convertToCapped" nuevamente, especificando un nuevo tamaño. No lo he intentado para reducir el tamaño de la colección. Puede ser algo sobre lo que necesites usar la versión de Scott Hernandez. Pero esto funciona para aumentar el tamaño de sus colecciones limitadas sin perder ningún dato o sus índices.


EDIT: @JMichal es correcta. Los datos se conservan, pero los índices no son y deberán volverse a crear.

+5

¡Trabaja para reducir el tamaño de la colección! Esta debería ser la respuesta correcta. –

+2

http://docs.mongodb.org/manual/reference/command/convertToCapped/ dice: Advertencia Este comando obtiene un bloqueo de escritura global y bloqueará otras operaciones hasta que se complete. –

+2

Pero no conserva los índices, todos tienen que volver a crearse –

Cuestiones relacionadas