在3.0驅動程序之前,所有BSON文檔均表示爲BSONObject的實例,它是org.bson包中的一個接口。驅動程序API(DBCollection等)進一步強加了BSObject的一個子接口DBObject的要求。驅動程序的大多數用戶都依賴BasicDBObject作爲實現DBObject的具體類。
此外,解析和序列化爲JSON的JSON類生成並期望DBObject的實例。
在新的驅動程序CRUD API(MongoCollection)中,DBObject在DBCollection中扮演的角色已被拆分。
MongoCollection是通用的(MongoCollection < TDocument>)。通用型,用於寫的方法,如insertOne,也是默認的文檔類型爲查詢文件的收集方法,如
- 無效insertOne(TDocument文件)
- FindIterable查找()
用於表示查詢結果默認爲TDocument類,但可以通過像調用方法被改變:
- FindIterable查找(<類TResult> resultClass)
- AggregateIterable aggregate(List <?擴展BSON>管道,類< TResult> resultClass)
作者想把它放到這些類型少限制越好,因爲它們可能被預先存在的POJO類的驅動程序。唯一的要求是該類的編解碼器已經在MongoCollection的CodecRegistry中註冊。有關詳細信息,請參見here。
對於用於表示像查詢過濾器,更新規範,排序標準等實體的BSON文檔,驅動程序強制要求用於此目的的類實現一個名爲Bson的新接口。 BasicDBObject,Document和BsonDocument都實現了該接口,因此可以使用任何接口,也可以創建自己的自定義類型。驅動程序本身會從大多數新的構建器靜態工廠方法中返回Bson的實例,如Filters類中的那些方法。
最後,對於返回代表管理命令結果(如運行通用命令)的BSON文檔的幫助程序方法,驅動程序會默認返回Document實例。
如果您需要在JSON和Document或BsonDocument之間進行轉換,則可以使用直接在這些類上定義的parse和toJson方法。在下面,這些依賴於3.0中引入的新的JsonReader和JsonWriter類。有關更多詳細信息,請參閱here。
作者還沒有棄用現有的JSON類,但最有可能將在未來的版本。這些類的
在條款才能使用,我會提供這樣的建議:
- 如果從2.13升級和持續使用DB/DBCollection,你仍然必須使用DBOBJECT。這不適用於新的異步驅動程序,它不依賴於DBObject。
- 對於基於MongoCollection的新應用程序(同步或異步),請使用Document類。
- 如果您希望以簡潔爲代價選擇安全類型,請使用BsonDocument。 BsonDocument實現Map < String,BsonValue>所以編譯器不會讓你添加一個不受支持的值類型,而實現了Map,Object>的Document將會(因此運行時錯誤是可能的)。