MongoDB 中(BsonDocument & Document & Bson)关系详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

MongoDB 中(BsonDocument & Document & Bson)关系详解

类图:

Java Driver 中有这么几个类和接口来表示Bson文档:

«Interface»
Bson
任何代表BSON文档的类,
不管是driver中包含的还是第三方的包,都要实现Bson这个接口,
这样就可以在高阶API中任何需要 BSON Document 的地方使用,
因此可以根据给定的需要互换使用.
«Interface»
Map
BsonDocument
虽然对于用户来说,一般使用驱动的高阶API,不使用这个类,
但是BsonDocument类对于驱动程序在内部管理文档至关重要.
BsonDocument类可以表示任何具有安全类型的复杂的动态结构化文档.

BsonDocument实现了类型安全的Map接口,
所以即便是int,String,List这种内置类型,仍然需要被包裹在BsonValue的子类中.
要看BsonValue的子类详情,可以参阅 BsonValue API 文档.
Document
大多数的应用程序会用Document类来替代BsonDocument类,
Document类和BsonDocument类相似,也可以表示任何复杂的动态结构化文档,
但是对于类型要求不像BsonDocument那么严格.
Document实现的是Map接口,所以的对类型的要求更宽泛.
«Interface»
BSONObject
«Interface»
DBObject
DBObject接口类似Document
不建议新的应用程序再使用它,但是从的2.X系列的驱动升级的应用程序可能继续使用
因为他也将BSON的值表示为Object,但是它有一些不可能克服的缺点:

1. 它是一个接口而不是一个类,所以它的API不能在不破坏二进制兼容性的情况下被扩展.
2. 它并没有真正实现Map接口
3. 它是一个接口,所以必须需要一个单独的具体类 BasicDBObject 去实现它.

总结:

  • BsonDocument 和 Document 是类
  • BsonDocument 更适用于底层内部的 API并且对于值类型的划分更细更严格
  • Document 对值类型的划分更宽泛更适合高阶的 API
  • DBObject 是接口需要一个具体的类 BasicDBObject 去实现它
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go