2012-01-09 2 views
10

I file sono archiviati in un MongoDB utilizzando GridFS. Ho bisogno di rimuovere alcuni di questi file per ID, dalla shell JavaScript. Devo rimuovere un singolo file usando il suo ID. Ho pensato che potevo fare questo:MongoDB rimuove gli oggetti GridFS dalla shell

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

Questo funziona in una certa misura; rimuove il file dalla raccolta fs.files ma non rimuove i blocchi stessi dalla raccolta fs.chunks. La ragione per cui lo so è perché controllo la lunghezza di entrambe le raccolte prima e dopo in RockMongo.

Potrei passare attraverso i blocchi e rimuovere quelli che si riferiscono a quel file, ma c'è un modo migliore e integrato per farlo?

risposta

12

Si desidera utilizzare db.fs.delete(_id); invece.

Aggiornamento Scusa, a quanto pare non funziona dalla shell, solo attraverso il driver. GridFS è una specifica per lo storage implementata dai driver. Sembra che non abbia molte funzionalità incorporate dalla shell, in quanto tale.

Update 2 C'è anche un tool a riga di comando, mongofiles (http://www.mongodb.org/display/DOCS/GridFS+Tools), che permette di eliminare i file in base al nome . mongofiles delete <filename>. Viene fornito con un avviso che cancellerà tutti i file con quel nome, quindi non è così dettagliato come da id.

+0

Ah capisco. Purtroppo, non posso usare mongofiles perché ho solo l'ID del file che voglio cancellare. Prevedi qualche problema che ottengo cancellando io stesso i pezzi corrispondenti? –

+4

Hai bisogno di farlo attraverso la shell? Perché non connetterti con un autista nella tua lingua preferita? E no, per quanto ne so, sarebbe ok fare qualcosa come 'db.fs.chunks.remove ({files_id: my_id});' e poi 'db.fs.files.remove ({_ id: my_id}) ; ' –

+0

Avrei preferito farlo dalla shell, ma userò una lingua con un driver. Grazie! –

22

È possibile eliminare il file GridFS eliminando entrambi i blocchi e file da shell. per esempio

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

Questi comandi faranno questo trucco.

+0

Anche questo è vero. –