Files
goext/mongoext/projections.go
T
Mikescher cdce955887
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m34s
Merge remote-tracking branch 'origin/feature/mongo-driver-v2'
2026-04-26 14:42:53 +02:00

32 lines
685 B
Go

package mongoext
import (
"reflect"
"strings"
"go.mongodb.org/mongo-driver/v2/bson"
)
// ProjectionFromStruct automatically generated a mongodb projection for a struct
// This way you can pretty much always write
// `options.FindOne().SetProjection(mongoutils.ProjectionFromStruct(...your_model...))`
// to only get the data from mongodb that you will actually use in the later decode step
func ProjectionFromStruct(obj any) bson.M {
v := reflect.ValueOf(obj)
t := v.Type()
result := bson.M{}
for i := 0; i < v.NumField(); i++ {
tag := t.Field(i).Tag.Get("bson")
if tag == "" {
continue
}
tag = strings.Split(tag, ",")[0]
result[tag] = 1
}
return result
}