簡體   English   中英

如何刪除mongodb中兩個collections的文件

[英]How to delete documents from two collections in mongodb

截至目前,我能夠根據查詢從 filestorage.files 集合中刪除特定文件,但我正在嘗試根據 files_id 從 filesstorage.chunks 集合中刪除特定塊。 有人可以建議我實現它的好方法。

我應該使用聚合嗎? 或任何循環機制?

請找到以下詳細信息

filestorage.files 集合:

[{
  "_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 集合:

[{
  "_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"
    }
  }
}]

這是我嘗試過的:

 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;
    }

如我所見,您正在刪除文件 ID。 因此,之后您與刪除 fileChunk 集合中的塊沒有任何關系。 這就是我的想法,首先將所有文件 ID 作為數組獲取,然后您可以通過將它們作為數組查詢來刪除帶有 folder_ids 的塊。

      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}});

注意:請通過上傳多個文件來檢查查詢的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM