简体   繁体   中英

How to delete documents from two collections in mongodb

As of now I am able to delete the specific files from filestorage.files collection based on query but I am trying to delete the specific chunks from filesstorage.chunks collection based on files_id. Can someone please suggest me the good approach to achieve it.

Should I use aggregations? or any looping mechanism?

Please find the below details

filestorage.files collection:

[{
  "_id": {
    "$oid": "635a68aa0651c2d869fc3fd3"
  },
  "length": 878669,
  "chunkSize": 261120,
  "uploadDate": {
    "$date": {
      "$numberLong": "1666869418612"
    }
  },
  "filename": "pexels-lucie-liz-3165335_2022-10-27T11-16-58.jpg",
  "contentType": "image/jpeg",
  "metadata": {
    "originalname": "pexels-lucie-liz-3165335.jpg",
    "parentFolder": {
      "$oid": "636cd238692344da47f3e301"
    },
    "path": "files/Folder1/Folder3/pexels-lucie-liz-3165335_2022-10-27T11-16-58.jpg"
  }
},

{
  "_id": {
    "$oid": "635a68aa0651c2d869fc3fd4"
  },
  "length": 878669,
  "chunkSize": 261120,
  "uploadDate": {
    "$date": {
      "$numberLong": "1666869418612"
    }
  },
  "filename": "nature-3165335_2022-10-27T11-16-58.jpg",
  "contentType": "image/jpeg",
  "metadata": {
    "originalname": "nature-3165335.jpg",
    "parentFolder": {
      "$oid": "636cd238692344da47f3e301"
    },
    "path": "files/Folder1/Folder3/nature-3165335_2022-10-27T11-16-58.jpg"
  }
}]

filestorage.chunks collection:

[{
  "_id": {
    "$oid": "635a68aa0651c2d869fc3fe6"
  },
  "files_id": {
    "$oid": "635a68aa0651c2d869fc3fd3"
  },
  "n": 0,
  "data": {
    "$binary": {
    "base64" : "xyz"
      "subType": "00"
    }
  }
},
{
  "_id": {
    "$oid": "635a68aa0651c2d869fc3fd5"
  },
  "files_id": {
    "$oid": "635a68aa0651c2d869fc3fd3"
  },
  "n": 0,
  "data": {
    "$binary": {
    "base64" : "abcd"
      "subType": "00"
    }
  }
}]

Here is what I have tried:

 delete_folder_files: async (ctx:any) => {
// here I am able to delete all the files but confused how to connect chunks schema and delete chunks  // based on files_id.
      await FileStorage.deleteMany({'metadata.parentFolder': ctx.params.id}); 
      await FileChunk.deleteMany({files_id : ? })
      ctx.status = HttpStatusCode.OK;
    }

As I can see you are deleting the file ids. So after that you do not have any relation to delete the chunks in fileChunk collection. Here is what I am thinking, First get all the file ids as an array and later you can delete the chunks with the folder_ids by querying them as array.

      const file_ids = await FileStorage.find({'metadata.parentFolder': ctx.params.id },{_id:1}).distinct('_id');
      await FileStorage.deleteMany({'metadata.parentFolder':ctx.params.id });
      await FileChunk.deleteMany({files_id:{$in:file_ids}});

Note: Please check the performance of the query by uploading multiple files.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM