shard2:PRIMARY> db.fs.chunks.find({“files_id”:ObjectId(“56c2822a24ac6d49321cca2d”)}).count();
1
shard2:PRIMARY> db.fs.files.remove({“_id”:ObjectId(“56c2822a24ac6d49321cca2d”)});
WriteResult({ “nRemoved” : 1 })
shard2:PRIMARY> db.fs.chunks.find({“files_id”:ObjectId(“56c2822a24ac6d49321cca2d”)}).count();
1
我在fs.files中删除,为什么在files.chunks中还能看到对应的记录
那么,我怎么删除那些,在fs.files中已经删除,而files.chunks没删除的数据?
fs.files中存储的是文件元数据,fs.chunks中存的才是文件内容,磁盘的占用主要在fs.chunks上。手工删除文件应该先删除chunks中的全部文档,再删除files中的对应记录。
看你的环境有分片,而你似乎是登录到了某一个分片上面,这样操作是非常危险的,因为config server里面还会有元数据,你这样会造成数据不一致。正确的姿势是登录到mongos,从mongos上面删除,并且要保证fs.files和fs.chunks中的对应内容都删除干净。一旦遗留下一些孤岛,想再找出来就会很费劲了,必须查找chunks中存在,而files中不存在的数据,在数据量大的情况下,这会非常低效。