【问题标题】: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 开发者社区决定这样做。

标签: mongodb bson


【解决方案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 位长度的二进制,然后转换为一系列字节?如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2021-04-07
  • 2021-06-13
相关资源
最近更新 更多