在MongoDB中存储二进制数据时,它在内部存储为二进制还是base64

在MongoDB中存储二进制数据时,它在内部存储为二进制还是base64,mongodb,Mongodb,如果我有以下课程(C#) 在MongoDB中,它是以二进制形式存储,还是以Base64形式存储?我有一个带有以下字段的(Java)类: private String interactionInstanceId; private String interactionId; private String messageId; private byte content[]; 字节内容[]字段保存为集合中的{“$binary”:““$type”:“00”}。 我认为C#没有什么不同 是“二进制字符串的

如果我有以下课程(C#)

在MongoDB中,它是以二进制形式存储,还是以Base64形式存储?

我有一个带有以下字段的(Java)类:

private String interactionInstanceId;
private String interactionId;
private String messageId;
private byte content[];
字节内容[]
字段保存为集合中的
{“$binary”:““$type”:“00”}
。 我认为C#没有什么不同

是“二进制字符串的base64表示法”,如下所示:


我希望这有帮助

与@ArielGro的答案相反,AFAICT MongoDB以二进制形式存储二进制数据。虽然提到Base64字符串,但我认为这仅仅是关于数据的逻辑结构(以JSON文档的形式描述)。基于MongoDB在BSON中存储数据这一事实,我认为MongoDB以二进制形式存储二进制数据


这并不是说大量的二进制数据应该直接存储在MongoDB文档中。但是对于少量的数据,我认为这是合理的。

好的,这意味着在mongo中移动二进制文件需要经过base64转换。性能和空间都不理想。@Thomas-我同意,这可能不理想,这就是为什么您更喜欢使用GridFS()来存储文件(如果您的字节数组表示文件)。GirdFS还支持使用流(至少在Java驱动程序中),这是另一个优点。也就是说,你用字节数组做什么?它是用来存储个人资料照片的,所以它们不是超大的。我想要的是在一个地方处理数据的能力;但我想gridfs可能是一个更明智的选择如果你不处理大数据,字节数组可能没那么糟糕,特别是如果它是一个单一的配置文件图片,并且你一次检索不到多个或几个。具体来说,
binary::=int32子类型(byte*)
其中首先存储长度为的int32,然后按照BSON规范存储字节。base64表示是JSON的扩展,因为它不能包含二进制数据,所以如果您将其作为JSON检索,它将被转换。
private String interactionInstanceId;
private String interactionId;
private String messageId;
private byte content[];