为啥mongodb以base64的形式存储二进制数据?

Posted

技术标签:

【中文标题】为啥mongodb以base64的形式存储二进制数据?【英文标题】:Why mongodb store binary data in the form of base64?为什么mongodb以base64的形式存储二进制数据? 【发布时间】:2021-11-05 13:36:04 【问题描述】:

我正在尝试了解 mongodb 如何在后台存储每种数据类型。 我发现它以 BSON 格式存储数据。

为了在mongodb中存储二进制数据,它需要用户将字节数组转换为base64,然后将base64转换后的字符串传递给BinData(subtype,content in base64)类。

以这种格式存储二进制数据的原因是什么。为什么 mongodb 不允许我们存储原始二进制文件?

【问题讨论】:

我想说,仅仅是因为 MongoDB 开发者社区决定这样做。 【参考方案1】:

根据BSON specification,二进制存储为 32 位长度,后跟类型标识符,然后是一系列字节。不是 base64 字符串,字节。

一个从codementor.io无耻复制的函数表明,在能够直接处理二进制数据的语言中,它可以直接存储:

static void Main(string[] args)

    Console.WriteLine("Hello World!");
    var service = new QuestionService();

    // CONVERT JPG TO A BYTE ARRAY
    byte[] binaryContent = File.ReadAllBytes("image.jpg");
    
    var question = new Question
    
        Category = "Children's Quizzes",
        Type = "Puzzles",
        QuestionHeading = "Find the cat in the below image",
        ContentImage = binaryContent,   // Store the byte array in ContentImage property
        Score = 10
    ;

    service.Create(question);

BinData() 是一个允许直接在源代码文本中指定二进制数据的构造函数。

geeksforgeeks.org 有一个示例说明如何Upload and Retrieve Image on MongoDB using Mongoose

【讨论】:

您是说 MongoDB 接受一个值作为 base64 字符串吗?然后它将该值转换为 32 位长度的二进制,然后转换为一系列字节?如果我错了,请纠正我。

以上是关于为啥mongodb以base64的形式存储二进制数据?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“仅”使用 Base64 来编码二进制数据?

显示大型 Base64 图像 MVC 4 DOTNET

Base64 编码知识,一文打尽!

为啥base64图像很大? xamarin 形式

MongoDB面试题

MongoDB面试题