【发布时间】:2020-10-28 13:40:33
【问题描述】:
我已经阅读了这个friendly article,关于使用官方 go mongo 驱动程序对自定义对象进行编码和解码。
有一个很好的例子,如何将它们编组为扩展的 json 格式 (bson.MarshalExtJSONWithRegistry)。但我想知道如何使用InserOne() 将此文档放入集合中(然后从中获取)。看看这个伪代码:
// myReg - variable created according to linked article in question.
// WithRegistry do **not** exist in mongo-driver lib is part of pseudocode
mongoCollection := client.Database("db").Collection("coll").WithRegistry(myReg)
// Now InserOne() honor myReg (type *bsoncodec.Registry) when serialize `val` and puting it into mongodb
mongoCollection.InsertOne(context.TODO(), val)
我浏览了 API 文档,发现有 Marshaler 和 Unmarshaler 接口,但是通过注册表方式,我可以在不同的集合上以不同的方式(反)序列化相同的类型(例如,当从旧格式迁移到新格式)。
所以问题是如何将*bsoncodec.Registry 与集合函数(如InserOne、UpdateOne、FindOne 等)一起使用,如果不是实现我的目标的最惯用方式(自定义(反)序列化)。
【问题讨论】: