Mongoose 是一个 Node.js 上的 MongoDB 对象建模库。它能够为 Node.js 应用程序提供 MongoDB 进行数据保存、查询、删除、更新等操作的简单而强大的 API 接口,可以快速地开发 web 应用程序和 API。
在某些场景下,我们需要在 Mongoose 的文档中保存二进制数据。本文将介绍如何在 Mongoose 文档中保存二进制数据,并提供示例代码以帮助读者快速上手。
保存图片二进制数据
在 Mongoose 中保存图片二进制数据需要在 schema 中声明 Buffer 类型,例如:
const imageSchema = new mongoose.Schema({ name: String, data: Buffer, });
如上代码所示,imageSchema 中的 data 字段声明为 Buffer 类型,即可保存二进制数据。
接下来,我们将数据存储到 imageSchema 中:
-- -------------------- ---- ------- ----- ---------- - ----------------------- ------------- ----- ---- - --------------------------------- ----- ----- - --- ------------ ----- ---------- ----- ----- --- ---------------- -- - -- ----- - ------------------- - ---- - ------------------ ----- ---------------- - ---
示例代码中,我们先使用 fs.readFileSync 读取图片的二进制数据并保存到 data 变量中,然后创建一个 ImageModel 实例,传递了 name 和 data 两个字段,最后调用 save() 方法将数据保存到数据库中。
保存音频或视频二进制数据
在 Mongoose 中保存音频或视频二进制数据同样需要在 schema 中声明 Buffer 类型:
const mediaSchema = new mongoose.Schema({ name: String, data: Buffer, contentType: String, });
示例代码中的 mediaSchema 中,data 字段依旧是 Buffer 类型,同时声明了 contentType 字段,用于保存媒体文件的 MIME 类型。
再看如何将数据存储到 mediaSchema 中:
-- -------------------- ---- ------- ----- ---------- - ----------------------- ------------- ----- ---- - -------------------------------------- ----- ----------- - ------------- -- ---- ---- ---- --------- - ----- ----- - --- ------------ ----- ---------- ----- ----- ------------ ------------ --- ---------------- -- - -- ----- - ------------------- - ---- - ------------------ ----- ---------------- - ---
从数据库中读取二进制数据
如果我们需要从数据库中读取保存了二进制数据的文档,可以使用 Buffer 类型的 toString() 方法将其转换成字符串输出,例如:
const ImageModel = mongoose.model('Image', imageSchema); ImageModel.findOne({ name: 'example' }, (err, image) => { if (err) { console.error(err); } else { console.log(image.data.toString('base64')); } });
示例代码中使用了 findOne() 方法查询满足条件的文档,并使用 data.toString('base64') 将二进制数据转换成 base64 编码字符串输出到控制台。
总结
本文介绍了如何在 Mongoose 中保存二进制数据,并提供了示例代码帮助读者快速上手。在实际开发中,我们可以根据业务需求自行调整代码,并使用更加高效的方式进行存储和读取。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6499657148841e989466bb97