2012-03-16 152 views
3

我有10 GB的数据fs.chunks的,我想删除每一个文件是不是fs.files。我已经删除了fs.files中的每个条目我不希望fs.files中的每个id都是我想保留的文件。MongoDB中删除fs.chunks其中不fs.files

所以,我想是这样db.fs.chunks.remove({"_id": {$nin: fs.files._id}})或“删除该不存在fs.files每fs.chunks条目”。

编辑: 我在寻找蒙戈相当于SQL delete from fs_chunks where id not in (select id from fs_files)的。

回答

10

我不认为有一个简单的方法,从执行查找,然后用foreach迭代做到这一点分开。因此,像:

function listParentFile(chunk){ 
    var parent = db.fs.files.findOne({'_id' : chunk.files_id}); 
    printjson(parent); 
} 
db.fs.chunks.find().forEach(listParentFile); 
+0

为了记录在案,我想知道,如果你可以做这样的事情:

function removeChunkIfNoOwner(chunk){ //Look for the parent file var parentCount = db.fs.files.find({'_id' : chunk.files_id}).count(); if (parentCount === 0){ db.fs.chunks.remove({'_id': chunk._id}); print("Removing chunk " + chunk._id); } } db.fs.chunks.find().forEach(removeChunkIfNoOwner); 

你可以看到这个方法,如果你创建这样的功能应该工作db.collection .find({ 'fields.Tags.value.uuid':{$中:db.collection.find({otherId: '8FAAD502-9F8D-4F84-80DC-D9C8A5801737'},{UUID:1,_id:0}) .toArray()}}); ...但它看起来不像它的作品! – 2012-03-16 14:14:00