diff --git a/struct.go b/struct.go index 1810bf6..9d21d06 100644 --- a/struct.go +++ b/struct.go @@ -72,6 +72,35 @@ func MapToStruct(m map[string]any, o any) error { return nil } +type WrapA struct { + Items []map[string]any +} + +// BsonAToSlice will convert a bson.A to []map[string]any. +func BsonAToSlice(m any) ([]map[string]any, error) { + + v := bson.M{ + "items": m.(bson.A), + } + + b, err := bson.Marshal(v) + if err != nil { + log.Printf("Failed marshal %v", err) + + return nil, err + } + + var o WrapA + err = bson.Unmarshal(b, &o) + if err != nil { + log.Printf("Failed to unmarshal %v", err) + + return nil, err + } + + return o.Items, nil +} + // MapIsSubset given two map[string]any m1 and m2 will determine if m1 is a subset of m2. // Only fields' name is evaluated not their values. func MapIsSubset(subset, superset any) bool {