如何在java中将GridFSFile从一个集合移动到另一个集合

qnakjoqk  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(140)

我的mongo数据库中有两个GridFS集合,我需要将文件从一个GridFS集合传输到同一数据库中的另一个集合。
我有一个List,我正在使用$in操作符来获取一个文件列表,该列表以GridFSFindIterable的形式返回,现在我需要找到一种方法将这些GridFSFiles移动到新的集合bucket 2。

GridFSBucket bucket1= GridFSBuckets.create(db, "bucket1");
GridFSBucket bucket2= GridFSBuckets.create(db, "bucket2");

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("_id", new BasicDBObject("$in", fileIdsList));

GridFSFindIterable bucket1Files = bucket1.find(searchQuery);

for(GridFSFile file: bucket1Files){
          
}

在bucket 2 collection中存储这些文件列表的最佳方法是什么?

q8l4jmvw

q8l4jmvw1#

所以我用一种简单的方法解决了这个问题。我没有得到gridFSBucket和GridFSFile,并试图将其迁移到新的集合中,这会使所有事情变得复杂,我只是决定直接在mongoCollections bucket1.files和bucket1.chunks上运行find()方法。
这将返回List documentsList,您可以将其插入到bucket2.files和bucket2.chunks中
我测试了它,我在bucket1中上传的图像可以在遵循此过程后从新的集合bucket2中检索。

MongoCollection<Document> bucket1FileColl = db.getCollection("bucket1.files");
 MongoCollection<Document> bucket1ChunkColl = db.getCollection("bucket1.chunks");
        
        
 MongoCollection<Document> bucket2FileColl = db.getCollection("bucket2.files");
 MongoCollection<Document> bucket2ChunkColl = db.getCollection("bucket2.chunks");

 BasicDBObject searchQuery = new BasicDBObject();
 searchQuery.put("_id", new BasicDBObject("$in", attachmentFileIdsList));
 ArrayList<Document> bucket1Files=
      bucket1FileColl.find(searchQuery).into(new ArrayList<Document>());

  
  if(CollectionUtils.isNotEmpty(bucket1Files)){
     bucket2FileColl.insertMany(bucket1Files);
  }
 

  BasicDBObject searchQueryChunks = new BasicDBObject();
  searchQueryChunks.put("files_id", new BasicDBObject("$in", attachmentFileIdsList));
  
  ArrayList<Document> bucket1Chunks= bucket1ChunkColl.find(searchQueryChunks).into(new ArrayList<Document>());

  
  if(CollectionUtils.isNotEmpty(bucket1Chunks)){
    bucket2ChunkColl.insertMany(bucket1Chunks);
  }

相关问题