我已經(jīng)閱讀了這篇關(guān)于使用官方 go mongo 驅(qū)動程序?qū)ψ远x對象進(jìn)行編碼和解碼的友好文章。有一個很好的例子,如何將它們編組為擴展的 json 格式(bson.MarshalExtJSONWithRegistry)。但我想知道如何將此文檔放入集合中InserOne()(然后從中獲?。?纯催@個偽代碼:// myReg - variable created according to linked article in question.// WithRegistry do **not** exist in mongo-driver lib is part of pseudocodemongoCollection := client.Database("db").Collection("coll").WithRegistry(myReg)// Now InserOne() honor myReg (type *bsoncodec.Registry) when serialize `val` and puting it into mongodbmongoCollection.InsertOne(context.TODO(), val)我瀏覽了 API 文檔,發(fā)現(xiàn)有Marshaler和Unmarshaler接口,但是通過注冊表方式,我可以在不同的集合上以不同的方式(反)序列化相同的類型(例如,從舊格式遷移到新格式時) )。所以問題是如何*bsoncodec.Registry與集合函數(shù)(如InserOne,等)一起使用UpdateOne,F(xiàn)indOne如果不是實現(xiàn)我的目標(biāo)(自定義(反)序列化)的最慣用方式。
1 回答
手掌心
TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊
該Database.Collection()方法具有“可選”options.CollectionOptions參數(shù),該參數(shù)確實具有設(shè)置bsoncodec.Registry. 如果您使用配置了注冊表的選項獲取您的集合,則該注冊表將用于對該集合執(zhí)行的所有操作。
像這樣使用它:
opts := options.Collection().SetRegistry(myReg)
c := client.Database("db").Collection("coll", opts)引用我的相關(guān)答案:如何在解組 MongoDB 文檔時忽略空值?
注冊表可以在多個級別設(shè)置/應(yīng)用,甚至可以設(shè)置/應(yīng)用到一個整體
mongo.Client,或者一個mongo.Database或只是一個mongo.Collection,當(dāng)獲取它們時,作為它們選項的一部分,例如options.ClientOptions.SetRegistry()。
因此,當(dāng)您不從舊格式遷移到新格式時,您可以將注冊表設(shè)置為“客戶端”級別并“完成”。只要驅(qū)動程序處理您注冊的自定義類型的值,就會應(yīng)用您的注冊表和自定義編碼器/解碼器。
- 1 回答
- 0 關(guān)注
- 214 瀏覽
添加回答
舉報
0/150
提交
取消
