亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MongoDB 中的小圖像(<4MB),我應該使用 gridFS 嗎?

MongoDB 中的小圖像(<4MB),我應該使用 gridFS 嗎?

森欄 2023-10-14 11:13:59
這里的問題和請求相當簡單,但尚未找到明確的答案。我是 multer、Node 和 MongoDB 的新手,這比我預想的要困難得多。我想在 MongoDB 中存儲小 JPEG,每個可能不超過 4 MB。據我所知,BSON 最大可達 < 16 MB,如果更大,則必須由 gridfs 處理。這些圖像只是我收藏中每個 _id 的個人資料照片。到目前為止,我已經能夠僅使用 multer 在本地上傳文件。現在我正在嘗試弄清楚如何以正確的方式在 MongoDB 中獲取這些圖像。這么小的圖像需要 gridfs 嗎?執行此操作的最佳計劃是什么?我正在想象將文件更新插入數據庫,但想知道這是否只會上傳文件名而不是圖像本身?我將如何改變我的“模式”來適應這個?如果您知道如何更改下面的更新插入(相對于進入 gridFS),那將是理想的選擇。這是代碼。數據庫更新:const updatePlace = async (place) => {  const database = await connect();  return database.collection('place').findOneAndUpdate(    { _id: new ObjectID(place._id) },    {      $set: {        name: place.name,        category: place.category,        city: place.city,        state: place.state,        country: place.country,        image: { filename: place.image, mime: 'image/jpeg' },      },    },    { upsert: true, returnOriginal: false }  );};存儲和上傳:const multer = require('multer');const storage = multer.diskStorage({  destination: function (req, file, cb) {    cb(null, './public/uploads');  },  filename: function (req, file, cb) {    cb(null, Date.now() + '_' + file.originalname);  },});const upload = multer({ storage: storage });Mongo DB 項目現在是這樣的:{  "_id": {    "$oid": "5fbc37c4fc13ae680b00001e"  },  "name": "Petronas Towers",  "category": "activity",  "city": "Kuala Lumpur",  "state": "Kuala Lumpur",  "country": "Malaysia",  "image": {    "filename": "petronas.jpg",    "mime": "image/jpeg"  }}
查看完整描述

2 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

GridFS 是一個不錯的選擇。你得到:

  • 驅動程序自動創建索引,從而實現高效檢索

  • 如果您的圖像超過 16 MB,則可以靈活處理

  • 獨立的元數據和內容存儲

您也可以使用二進制類型并將圖像數據直接存儲在字段中。這會減少開銷,但是:

  • 您應該仍然單獨存儲內容的元數據,或者對該解決方案與內容內聯在文檔中的解決方案進行基準測試(因為當您只需要元數據時,跳過內容字節可能會很慢)

  • 您需要自己處理元數據


查看完整回答
反對 回復 2023-10-14
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

建議您將較?。ㄐ∮?6MB)的文件作為Buffer類型(即BSON二進制類型)的數據保存到MongoDB中。BSON 二進制類型用于存儲任何類型的二進制數據。BSON 二進制類型對應于 RDBMS BLOB 類型,它是 MongoDB 提供的兩種二進制對象存儲(另一種是 GridFS)的基礎。GridFS 是 MongoDB 中的一項規范,它可以通過將給定文件劃分為多個塊來在 MongoDB 中存儲大型文件(例如視頻、大型音頻文件和圖像),這反過來又使我們能夠僅獲取和加載文件的部分內容,如下所示必需的,而不是檢索整個文件。

如果您需要存儲的所有文件大小都小于 16 MB,建議您不要使用 GridFS。如果是這種情況,并且您仍然想利用 MongoDB,只需將文件直接存儲在普通的 MongoDB 文檔中即可。BSON 文檔的最大大小為 16 MB,因此如果您的所有文件都較小,那么使用 GridFS 會浪費資源。

但出于教育目的,如果您對小于 16MB 的文件使用 GridFS 并沒有什么問題,以上僅適用于生產級別的項目。


查看完整回答
反對 回復 2023-10-14
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號