(POC) GODRIVER-3697 Add DefaultDocumentMap as Decoder Method #2238
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
GODRIVER-3697
Summary
Add
Decoder.DefaultDocumentMap()method to decode nested documents asmap[string]anyinstead ofbson.M.Suggest not documenting precedence between BSONOptions and bson.Decoder methods to reduce cognitive load. It's not realistic that a user would call both DefaultDocumentMap() and DefaultDocumentM().
Background & Motivation
In Go Driver v2, nested documents decode as
bson.Dby default, orbson.MwithDefaultDocumentM(). Whilebson.Mis defined astype M map[string]any, Go's type system treatsbson.Mandmap[string]anyas distinct types. This breaks compatibility with third-party libraries expecting map[string]any (e.g.,github.com/Jeffail/gabs/v2), user code performing type assertions tomap[string]any, and codebases that prohibitbson.M` usage.The team previously noted that converting from
bson.Mtomap[string]anyis straightforward in user code. However, for deeply nested documents and arrays, this requires recursive transformation of the entire structure:This feature has been requested multiple times across different contexts (GODRIVER-3689, REP-6132), indicating a legitimate user need for v1-equivalent decoding behavior.