2012-01-09 16 views
10

Tengo archivos almacenados en un MongoDB usando GridFS. Necesito eliminar algunos de esos archivos por ID, desde el shell de JavaScript. Necesito eliminar un solo archivo usando su identificación. Pensé que podría hacer esto:MongoDB eliminar objetos GridFS del shell

db.fs.files.remove({_id: my_id}); 

Esto funciona hasta cierto punto; elimina el archivo de la colección fs.files pero no elimina los fragmentos de la colección fs.chunks. La razón por la que lo sé es porque verifico la longitud de ambas colecciones antes y después en RockMongo.

Podría ir a través de los fragmentos y eliminar los que se refieren a ese archivo, pero ¿hay una forma mejor e integrada de hacerlo?

Respuesta

12

En su lugar, desea utilizar db.fs.delete(_id);.

Actualización Lo sentimos, aparentemente no funciona desde el shell, solo a través del controlador. GridFS es una especificación de almacenamiento implementada por los controladores. Parece que no tiene mucha funcionalidad incorporada del shell, como tal.

Actualización 2 También hay una herramienta de línea de comandos, mongofiles (http://www.mongodb.org/display/DOCS/GridFS+Tools), lo que le permite eliminar archivos por su nombre. mongofiles delete <filename>. Viene con una advertencia de que eliminará todos los archivos por ese nombre, por lo que no es tan granular como por id.

+0

Ah, ya veo. Tristemente, no puedo usar mongofiles porque solo tengo el ID del archivo que quiero eliminar. ¿Prevé algún problema al eliminar los fragmentos correspondientes? –

+4

¿Necesita hacer esto a través del caparazón? ¿Por qué no conectarse con un controlador en el idioma de su elección? Y no, hasta donde sé, estaría bien hacer algo como 'db.fs.chunks.remove ({files_id: my_id});' y luego 'db.fs.files.remove ({_ id: my_id}) ; ' –

+0

Hubiera preferido hacerlo desde el shell, pero usaré un lenguaje con un controlador. ¡Gracias! –

22

Puede eliminar el archivo GridFS mediante la supresión de los dos trozos de cáscara y archivos. por ejemplo

db['fs.chunks'].remove({files_id:my_id}); 
db['fs.files'].remove({_id:my_id}); 

Esos comandos harán tal truco.

+0

Esto también es cierto. –

Cuestiones relacionadas