mongodb - 了解 BSON : what is a "function" (\x01) and what possible user defined subtypes are there? 中的二进制子类型

标签 mongodb bson

bsonspec.org列出一组二进制子类型,包括通用二进制 (\x00)、函数 (\x01)、UUID (\x04)、MD5 (\x05)、用户定义 (\x80)。 问题是:

  1. 什么是“函数”子类型以及它的用途是什么?如果这是编译后的字节码,有什么限制吗? MongoDB 中有使用吗?
  2. 有哪些用户定义的子类型?语法说它只是\x80,但底部的注释添加了\x80-\xFF 范围内的任何子类型都是用户定义的。我之前尝试过reactivemongo,但它无法解析除\x80之外的任何用户定义类型。一些谷歌搜索表明,例如,perl mongodb 库也只知道\x80 而不是其他的。那么,库不支持\x81-\xFF 是一个错误吗?

最佳答案

1) IIRC,子类型 1 未在 MongoDB 中使用。也许应该弃用它。我不记得它的历史,如果有人记得请评论,否则我认为它很古老。

2) 规范文档可以更清楚,0x80 - 0xff 都是合法的,并且该范围是为用户定义的子类型保留的。或者更确切地说,小于 0x80 是为预定义类型保留的。

一般来说,目前,MongoDB 不会对 BinData 子类型做任何语义处理,它认为它们是用户数据。 (除了子类型不同之外,出于查询目的,服务器绝对不会认为两个 BinData 值相等。)我相信,shell 还具有一些 pretty-print MD5 和 UUID 以及帮助程序的能力。

也就是说,对于需要序列化某些数据的任何地方,使用 BSON ex-Mongo 是非常有意义的,尤其是在某种程度上动态类型的情况下,并且工具应该期望这些值是合理的,如果属于暗示这一点的子类型(例如UUID 子类型应该是 16 字节值,即使 MongoDB 服务器当前并不真正关心这一点。

如果工具不允许> 0x80,它可能需要调整。

关于mongodb - 了解 BSON : what is a "function" (\x01) and what possible user defined subtypes are there? 中的二进制子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34586432/

相关文章:

node.js - 如何使用 ref 在 mongodb - mongoose 中正确存储文档?

java - 如何使用 MongoDB 中的 Criteria 进行投影?

mongodb - golang mgo 编码 bson

c# - 将 Mongodb 字符串反序列化为对象

mongodb - Haskell,mongodb,日期

mongodb - Mongo 在 Meteor 应用程序的 _id_ 字段上给出重复键错误

java - 使用 java 查看 .bson 文件的内容

python - 是否有一个 python 解码器可以生成有效的 json 并处理 NaN

c++ - 从 std::vector 到 mongo 数组

node.js - 使用 Node js、express js 和 mongodb 的应用程序