首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB删除不在fs.files中的fs.chunks

MongoDB删除不在fs.files中的fs.chunks
EN

Stack Overflow用户
提问于 2012-03-16 21:15:51
回答 4查看 5.7K关注 0票数 5

我在fs.chunks中有10 GB的数据,我想删除所有不在fs.files上的文档。我已经删除了fs.files中所有我不想要的条目,所以fs.files中的每个id都是我想要保留的文件。

因此,我想要类似于db.fs.chunks.remove({"_id": {$nin: fs.files._id}})或“删除fs.chunks中不存在于fs.files中的所有条目”之类的东西。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-16 21:46:20

除了执行查找然后使用forEach迭代之外,我不认为有一种简单的方法可以做到这一点。所以就像这样:

代码语言:javascript
复制
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);

您可以看到,如果您创建一个如下所示的函数,则此方法应该有效:

代码语言:javascript
复制
function listParentFile(chunk){
   var parent = db.fs.files.findOne({'_id' : chunk.files_id});
   printjson(parent);
}
db.fs.chunks.find().forEach(listParentFile);
票数 14
EN

Stack Overflow用户

发布于 2018-12-15 20:07:30

我发现这个基于Mick的解决方案可以更快地处理大量的数据块:

代码语言:javascript
复制
function removeChunkIfNoOwner(files_id){
  //Look for the parent file
  var parentCount = db.fs.files.find({'_id' : files_id}).count();

  if (parentCount === 0 ){
      res = db.fs.chunks.remove({'files_id':files_id})
  }
}

files = db.fs.chunks.distinct('files_id').forEach(removeChunkIfNoOwner)
票数 2
EN

Stack Overflow用户

发布于 2019-10-02 20:05:49

使用distinct对我不起作用,因为我的集合太大了。对Bas的查询稍作修改就可以了。

代码语言:javascript
复制
function removeChunkIfNoOwner(chunk){
  var parentCount = db.fs.files.find({'_id' : chunk.files_id}).count();

  if(parentCount === 0){
    res = db.fs.chunks.remove({'files_id':chunk._id})
    print("item removed")
  }
}
files = db.fs.chunks.find({files_id:{$exists:1}},{data:0}).forEach(removeChunkIfNoOwner)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9737953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档